Sort a linked list using insertion sort.
//鏈表插入排序
//對於當前遍歷的cur點,判斷前面是否可以插入,若可以插入,則當前遍歷點cur指向插入點的後一點,插入點的前一點指向cur
//然後再將前面已經排好序的鏈表的最後一個節點,指向cur的下一個節點。
//利用臨時變量tmp記錄當前遍歷節點的下一個節點,以便繼續遍歷下個節點
class Solution {
public:
ListNode* insertionSortList(ListNode* head) {
ListNode dummy(INT_MIN);
ListNode* cur = head;
while (cur !=nullptr)
{
ListNode* pos = findInsertPos(&dummy, cur->val);
ListNode* tmp = cur->next; //記錄當前遍歷節點的下一個節點,以便繼續遍歷下個節點
cur->next = pos->next;
pos->next = cur;
cur = tmp;
}
return dummy.next;
}
//找到當前遍歷點cur的插入位置
ListNode* findInsertPos(ListNode *head, int x){
ListNode* pre=nullptr ;
ListNode* cur= head;
while (cur !=nullptr && cur->val<=x)
{
pre = cur;
cur = cur->next;
}
return pre;
}
};
