您的位置:首页 > 其它

[LeetCode] 147. Insertion Sort List

2016-09-10 20:23 232 查看
思路:

用一个虚拟头结点放到前面, 这样好操作一点. 然后, 拿两个指针开始遍历链表, 当prev的next的val小于cur的val时, 就不停移动prev, 直到遇到比cur的值大的, 就停下, 把cur插进去. 但是要注意在外层循环开始的时候, 我们要判断一下prev有没有到链表尾部, 或者prev的next的值有没有大于等于cur的值, 如果这个情况发生了, 我们才要把prev置回链表首, 否则我们不需要每次都从头开始循环. 这样节省了很多时间.

ListNode* insertionSortList(ListNode* head) {
if (! head || ! head->next) return head;
ListNode dummy = ListNode(0);
ListNode* prev = &dummy;
ListNode* cur = head;
ListNode* next = NULL;

while (cur) {
next = cur->next;
if (! prev || ! prev->next || prev->next->val >= cur->val)
prev = &dummy;
while (prev->next && prev->next->val < cur->val)
prev = prev->next;
cur->next = prev->next;
prev->next = cur;
cur = next;
}

return dummy.next;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 链表