struct ListNode
{
int val;
ListNode *next;
ListNode():val(0),next(nullptr){}
ListNode(int x):val(x),next(nullptr){}
ListNode(int x,ListNode *next):val(x),next(next){}
};
class Solution {
public:
ListNode *insertionSortList(ListNode *head) {
if(head==nullptr||head->next==nullptr)return head;
ListNode *dummyHead = new ListNode(0,head);//哑结点指向头结点
ListNode *lastSorted = head;//已排好序链表的最后一个结点
ListNode *cur = head->next;//待排序的结点
while(cur) {
if(cur->val > lastSorted->val) {
lastSorted = lastSorted->next;
}
else {
ListNode *prev = dummyHead;
//寻找cur应当插入位置的前一个结点
while(prev->next->val < cur->val) {
prev = prev->next;
}
lastSorted->next = cur->next;
cur->next =prev->next;
prev->next = cur;
}
cur = lastSorted->next;
}
return dummyHead->next;
}
};
LeetCode 147. 对链表进行插入排序 题解 C/C++
于 2021-04-11 23:18:41 首次发布