148. Sort List 链表排序(C++)
来源:互联网 发布:青岛淘宝美工速成班 编辑:程序博客网 时间:2024/05/19 17:51
问题:
Sort List
链表排序,从小到大。
参考链接:
1、
148_Sort List | O(nlogn)链表排序 | Medium
2、
Sort List
3、
LeetCode 148 — Sort List(C++ Java Python)
4、
LeetCode(148)Sort List
思想:排序算法中,自底向上的归并排序算法更适合链表排序(参考《算法》(第四版))。结合234. Palindrome Linked List中的寻找链表中间节点程序以及21. Merge Two Sorted Lists合并两个有序链表的程序。
注意点:
边界条件:空链表,1个节点的链表,2个节点的链表,3个节点的链表。
区别一下程序:
1、
ListNode* p=head; ListNode* q=head; //两个指针法实现从中间切分 while(q) //始终剩三个节点的链接不能排序 { q = q->next; if(q) { q = q->next; } p = p->next; }2、
while (q != nullptr && q->next != nullptr) { p = p->next; q = q->next->next; }3、
while(q->next != NULL) { q = q->next->next; if(q == NULL) { break; } p = p->next; }
递归与归并过程如下:
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* sortList(ListNode* head) { if(!head||!head->next) return head; ListNode* p=head; ListNode* q=head; //两个指针法实现从中间切分 /* while(q) //始终剩三个节点的链接不能排序 { q = q->next; if(q) { q = q->next; } p = p->next; } */ /* while (q != nullptr && q->next != nullptr) { p = p->next; q = q->next->next; }*/ while(q->next != NULL) { q = q->next->next; if(q == NULL) { break; } p = p->next; } ListNode* later = p->next; p->next = NULL; ListNode* left = sortList(head); later = sortList(later); return mergeTwoLists(left, later); }private: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(-1); ListNode* tmp = head; if (!l1) return l2; if (!l2) return l1; while(l1&&l2) { if(l1->val > l2->val) { tmp->next = l2; l2 = l2->next; } else { tmp->next = l1; l1 = l1->next; } tmp=tmp->next; } while(!l1&&l2) { tmp->next = l2; l2 = l2->next; tmp=tmp->next; } while(l1&&!l2) { tmp->next = l1; l1= l1->next; tmp=tmp->next;//跳到下一个位置 } return head->next; }};
0 0
- 148. Sort List 链表排序(C++)
- 148. Sort List 链表归并排序
- 链表排序 Sort List
- Sort List 链表排序
- 链表排序(Sort List)
- [C++]LeetCode: 125 Sort List (归并排序链表)
- [C++]LeetCode: 126 Insertion Sort List (插入排序链表)
- LeetCode 148. Sort List(链表排序)
- leetcode 148. Sort List 链表归并排序
- Sort List 链表排序@LeetCode
- Leetcode Sort List 链表归并排序
- LeetCode Sort List(链表排序)
- Insertion Sort List 链表插入排序
- Insertion Sort List 链表插入排序
- 排序链表(Sort linked list)
- LeetCode-Sort List 链表排序
- Leetcode Sort List 链表排序
- Sort List 归并排序链表
- freeBSD 装载u盘、cd问题
- MobileNets 论文笔记
- caffe学习笔记----4-matlab接口总结
- STL综合案例
- 下辈子千万不要做程序员,少很多失眠
- 148. Sort List 链表排序(C++)
- 利用互联网找工作简单么
- 常用的依赖包
- 动态规划练习--X()
- Android 国际化
- JS精华记录(一)
- 2017年4月阅读清单
- Java Html/jsp服务器表单
- java编程思想阅读笔记 第三章(赋值操作=)