Leetcode NO.147 Insertion Sort List
来源:互联网 发布:mac 桌面隐藏硬盘 编辑:程序博客网 时间:2024/06/11 01:38
本题题目要求如下:
Sort a linked list using insertion sort.
题目相当之简单,而且本题都把算法限定为insertion sort,所以也没有改进的余地,基本来讲,本题就考一个小技巧以及基本功。。
很可惜,我基本功很烂,当然跟没有想出那个小技巧简化问题也有关系。。。
题目代码如下:
/** * 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 == NULL || head->next == NULL) return head; /* create a new node which value is INT_MIN */ ListNode* virtual_head = new ListNode(INT_MIN); virtual_head->next = head; ListNode* prev = head; for (ListNode* tmp = head->next; tmp != NULL; prev = tmp, tmp = tmp->next) { for (ListNode* cur = virtual_head; cur != tmp; cur = cur->next) { if (cur->next->val > tmp->val) { /* swap tmp with cur */ prev->next = tmp->next; tmp->next = cur->next; cur->next = tmp; tmp = prev; break; } } } ListNode* ret = virtual_head->next; delete virtual_head; return ret; }};本题用到的小技巧就是在head前面再新建一个node: New ListNode(INT_MIN),这个node比所有元素都小,所以可以作为头指针,不会换位置,而insertion sort之后后,这个头指针的next必然指向我们需要得的结果,这样避免了不断切换头指针的麻烦。
剩下的就是要思考如何交换两个指针
INT_MIN(cur) -> 2 -> 3(prev) -> 1(tmp) -> 4
我们要在cur 和 cur->next之间插入tmp
先把3,4连上: prev->next = tmp->next
1指向2: tmp->next = cur->next
cur->next = tmp;
最后得更新tmp:放在pre的位置即可,这样下一循环就指向了4,没有浪费检索,也没有漏掉某个元素。。
!!!!一定要加强基本功!!!!!!!!!
0 0
- Leetcode NO.147 Insertion Sort List
- leetCode No.147 Insertion Sort
- LeetCode(147) Insertion Sort List
- LeetCode: Insertion Sort List [147]
- LeetCode 147 Insertion Sort List
- [leetcode 147] Insertion Sort List
- LeetCode 147 Insertion Sort List
- LeetCode 147 Insertion Sort List
- [leetcode 147]Insertion Sort List
- leetcode-147 Insertion Sort List
- [LeetCode 147]Insertion Sort List
- Leetcode[147]-Insertion Sort List
- Insertion Sort List - LeetCode 147
- leetcode[147]:Insertion Sort List
- LeetCode(147) Insertion Sort List
- leetcode 147: Insertion Sort List
- [Leetcode]#147 Insertion Sort List
- leetCode #147 Insertion Sort List
- 【PAT 1033】To Fill or Not to Fill
- 【张尧学与一等奖】乐见政府退出科学分歧 欣闻校长不避同行争议
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
- MATLAB nctoolbox使用
- Python 中 datetime时间模块学习
- Leetcode NO.147 Insertion Sort List
- Struts 1 之<logic>标签库
- 第330天(35W+6)
- Path Sum II
- (交叉验证 )如何实现两台Domino之间的相互访问
- 人要有所坚持,即便是有时候坚持意味着孤立无援
- Spring之配置文件加载方式
- 调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。
- 3张图解决linux下mysql中文乱码问题