对链表进行排序
来源:互联网 发布:软件工程硕士排名 编辑:程序博客网 时间:2024/04/27 20:38
对链表进行排序:
参考的思路是来自于这位“哥们 ”https://leetcode.com/discuss/92326/share-my-c-concise-solutions-easy-to-understand
</pre><pre name="code" class="cpp">/** * 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 == NULL){return head;}ListNode *rt = Sort(head);return rt; }ListNode * Sort(ListNode *begin ){//找到链表中间的位置if(begin == NULL){return NULL;}//链表只有一个元素,直接返回if(begin->next == NULL){return begin;}ListNode *fast_ptr = begin->next ;//注意这里快指针要先走一步ListNode *slow_ptr = begin ;//两个快慢指针,将量表拆分成为两个部分while(fast_ptr->next != NULL){fast_ptr = fast_ptr->next->next;slow_ptr = slow_ptr->next;if(fast_ptr == NULL){// 注意这里也一定要判断,不然会段错误break;}} fast_ptr = slow_ptr->next;slow_ptr->next = NULL;ListNode *l1 = Sort(begin );ListNode *l2 = Sort(fast_ptr);//将两个排序的链表合并成为一个链表ListNode dump(0);ListNode * l = &dump;while(l1 != NULL && l2 != NULL){if(l1->val < l2->val ){l->next = l1 ;l = l->next;l1 = l1->next;}else {l->next = l2;l = l->next;l2 = l2->next;}}if(l1 != NULL){l->next = l1;}if(l2 != NULL){l->next = l2;}return dump.next;//注意这里返回的是新的链表}void Print(ListNode * l){while(l != NULL){cout<<l->val <<" ";l = l->next;}cout<<endl;}};
0 0
- 对链表进行排序
- 对链表进行排序
- 对链表进行归并排序
- 对链表进行归并排序
- 对链表进行归并排序
- 对链表进行归并排序
- 对给定链表进行插入排序。
- 对链表数据进行插入排序
- 用归并排序对链表进行排序
- 用归并排序对链表进行排序
- 用归并排序对链表进行排序
- 对链表进行排序(归并排序)
- 对链表进行排序(C语言)例程
- 用双向链表对整形数据进行排序
- 用双向链表对字符串进行排序
- 对链表进行排序 搜狗2012笔试
- 【C++】对双向链表进行冒泡排序
- 对链表中的某一项数据进行排序
- hdu 2680 最短路
- 如何在bluemix的虚拟机上部署selenium hub
- iOS autoLayout
- Git学习
- 命令行执行Junit测试
- 对链表进行排序
- 欢迎使用CSDN-markdown编辑器
- NoSQL之Redis---Lists类型命令
- Java加密技术(二)——对称加密算法DES&AES
- 仿微信图片选择器
- Android Dev Intro - Stencil Test
- java中的jar包
- iOS学习之——多线程编程
- 图解 & 深入浅出JavaWeb:事务必会必知