ACM-單向鏈表插入排序算法(在原鏈表上操作)
阿新 • • 發佈:2018-08-16
鏈表插入 lis urn else nod listnode 下一個 class ont
鏈接:https://www.nowcoder.com/questionTerminal/152bc6c5b14149e49bf5d8c46f53152b?toCommentId=1610886 來源:牛客網 /* 1.若鏈表只有一個節點或者為空,直接返回 2.將鏈表的前兩個節點排序,並將排序之後的第二個節點的下一個節點賦空 3.此時整個鏈表分為了兩個,將未排序的節點一一插入到已排序鏈表中: 3.1.第一種情況,待插入節點比排序鏈表的頭節點小 3.2.第二種情況,待插入節點比排序鏈表的最後節點大 3.3.第三種情況,待插入節點可插入到排序鏈表中 */ class Solution { public: ListNode *insertionSortList(ListNode *head) { //輸入為空或者只有一個節點 if(!head || !head->next)return head; ListNode *unSortCur = head->next->next; if(head->val > head->next->val) { ListNode *p = head; head = head->next; head->next = p; p->next = nullptr; } else head->next->next = nullptr; while(unSortCur != nullptr) //QQQ { ListNode *sortPre = head; ListNode *sortCur = sortPre->next; ListNode *unSortNext = unSortCur->next;if(unSortCur->val < head->val) { unSortCur->next = head; head = unSortCur; } else{ while(sortCur != nullptr && unSortCur->val > sortCur->val) { sortCur = sortCur->next; sortPre = sortPre->next; } if(sortCur == nullptr){ sortPre->next = unSortCur; unSortCur->next = nullptr; } else{ sortPre->next = unSortCur; unSortCur->next = sortCur; } } unSortCur = unSortNext; } return head; } };
ACM-單向鏈表插入排序算法(在原鏈表上操作)