insertion-sort-list 插入法排序链表

题目:

使用插入排序对链表进行排序。
Sort a linked list using insertion sort.

示例:

输入:{3,2,4}    输出:{2,3,4}

代码:

 1 /**
 2  * struct ListNode {
 3  *  int val;
 4  *  struct ListNode *next;
 5  * };
 6  */
 7  
 8 class Solution {
 9 public:
10     /**
11      *
12      * @param head ListNode类
13      * @return ListNode类
14      */
15     ListNode* insertionSortList(ListNode* head) {
16         if(head == NULL) return head;
17         ListNode* dumy = new ListNode(INT_MIN);
18         ListNode* cur = head;
19         ListNode* pre = dumy;
20         while(cur != NULL){
21             pre = dumy; //从新链表的头节点开始查找插入位置
22             while(pre->next != NULL && cur->val > pre->next->val)
23                 pre = pre->next;
24             ListNode* next = cur->next; //记录后继结点
25             cur->next = pre->next; //插入
26             pre->next = cur;
27             cur = next;
28         }
29         return dumy->next;
30     }
31 };

我的笔记:

  由于链表的存储格式是不连续的,每个节点都是一个新的地址。所以在做插入排序的操作时就会容易很多,直接对逆序结点进行操作即可。

  上述方法为浅拷贝,未更改结点的存储地址,只是更改了存储顺序。

原文地址:https://www.cnblogs.com/john1015/p/13227512.html