码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Insertion Sort List

时间:2015-06-29 23:52:10      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

Well, life gets difficult pretty soon whenever the same operation on array is transferred to linked list.

First, a quick recap of insertion sort:

Start from the second element (simply a[1] in array and the annoying head -> next -> val in linked list), each time when we see a node with val smaller than its previous node, we scan from the head and find the position that the current node should be inserted. Since a node may be inserted before head, we create a new_head that points to head. The insertion operation, however, is a little easier for linked list.

Now comes the code:

 1 class Solution { 
 2 public:
 3     ListNode* insertionSortList(ListNode* head) {
 4         ListNode* new_head = new ListNode(0);
 5         new_head -> next = head;
 6         ListNode* pre = new_head;
 7         ListNode* cur = head;
 8         while (cur) {
 9             if (cur -> next && cur -> next -> val < cur -> val) {
10                 while (pre -> next && pre -> next -> val < cur -> next -> val)
11                     pre = pre -> next;
12                 /* Insert cur -> next after pre.*/
13                 ListNode* temp = pre -> next;
14                 pre -> next = cur -> next;
15                 cur -> next = cur -> next -> next;
16                 pre -> next -> next = temp;
17                 /* Move pre back to new_head. */
18                 pre = new_head;
19             }
20             else cur = cur -> next;
21         }
22         ListNode* res = new_head -> next;
23         delete new_head;
24         return res;
25     }
26 };

 

[LeetCode] Insertion Sort List

标签:

原文地址:http://www.cnblogs.com/jcliBlogger/p/4609119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!