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;
}
};