【leetcode 链表 】Insertion Sort List
2014-11-08 22:45
417 查看
1、题目
Sort a linked list using insertion sort.2、分析
用插入排序的方法,排序单链表。细节实现题,需要注意的是不要让已排序链表的尾部出现“环”,每一次循环过后,已排序链表尾部都应该指向null。有一些算法没考虑周全就会出现环的情况,是因为把当前节点插入到已排序链表中时,没有断开当前节点与它前驱节点的连接,造成尾部环。下面代码所示的算法可以避免环的出现。
3、代码
<span style="font-size:18px;">/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *insertionSortList(ListNode *head) { if(head==nullptr) return head; ListNode dummy(INT_MIN); /*dummy的val设置为最小值,初始时指向null,即不指向任何节点,这个很巧妙,如果dummy指向head,然后从head->next开始插入,会导致已排序链表 尾部出现环的情况;而让dummy指向null,然后从head节点开始插入,每次结束后已排序链表尾部均指向null*/ ListNode *cur=head; while(cur!=nullptr) { ListNode *pos=findinsertpos(&dummy,cur); //cur插在pos后面 ListNode *cur_next=cur->next; cur->next=pos->next; pos->next=cur; cur=cur_next; } return dummy.next; } private: ListNode *findinsertpos(ListNode *head,ListNode *cur) { ListNode *pos=nullptr; for(ListNode *p=head;p!=nullptr&&p->val<=cur->val;pos=p,p=p->next) ; return pos; } };</span>
4、算法演示
以初始链表{2->3->1->null}为例相关文章推荐
- Leetcode Insertion Sort List 插入排序链表
- LeetCode147_Insertion Sort List(用插入排序算法对链表进行排序) Java题解
- leetcode_c++:链表:Insertion Sort List(147)
- LeetCode-Insertion Sort List-链表插入排序-链表操作
- LeetCode 147 Insertion Sort List(链表)
- leetcode---insertion-sort-list---链表
- leetcode——Insertion Sort List 对链表进行插入排序(AC)
- leetcode Insertion Sort List(链表插入排序)
- LeetCode Insertion Sort List 链表的插入排序
- LeetCode | Insertion Sort List(插入法排序链表)
- LeetCode Insertion Sort List 链表插入排序
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 【leetcode】【单链表】【147】Insertion Sort List
- LeetCode Insertion Sort List(单链表插入排序)
- [LeetCode147]Insertion Sort List(链表插入排序)
- [LeetCode] Insertion Sort List 单向链表插入排序
- LeetCode 147 Insertion Sort List(链表插入排序)
- LeetCode:Insertion Sort List//链表插入排序
- 【leetcode】【单链表】【147】Insertion Sort List
- [LeetCode] Insertion Sort List 链表插入排序