leetcode143. Reorder List
来源:互联网 发布:怎样做软件 编辑:程序博客网 时间:2024/06/06 15:45
medium程度题
题目:
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given {1,2,3,4}
, reorder it to {1,4,2,3}
.
AC解:
class Solution {public: void reorderList(ListNode* head) { if (head == nullptr || head->next == nullptr) return ; vector<ListNode*> vec; //遍历一遍链表,所有节点存入vec ListNode *cur = head; while (cur) { vec.push_back(cur); cur = cur->next; } //改造节点 auto first = vec.begin(); auto second = vec.end() - 1; while (first < second) { (*first)->next = *second; first++; (*second)->next = *first; second--; } (*first)->next = nullptr; }};
AC解:
class Solution {public: void reorderList(ListNode* head) { if (head == nullptr || head->next == nullptr) return ; ListNode *fast = head,*slow = head,*prev = nullptr; //拆分链表 while (fast && fast->next) { prev = slow; slow = slow->next; fast = fast->next->next; } prev->next = nullptr; slow = reverse(slow); //合并两个链表 ListNode *cur = head; while (cur->next) { ListNode *temp = cur->next; cur->next = slow; slow = slow->next; cur->next->next = temp; cur = temp; } cur->next = slow; } ListNode* reverse(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode *prev = head; for (ListNode *cur = head->next,*next = cur->next; cur;) { head->next = next; cur->next = prev; prev = cur; cur = next; next = next ? next->next : nullptr; } return prev; }};
两种解法时间性能上没有差别
0 0
- LeetCode143 Reorder List
- LeetCode143—Reorder List
- LeetCode143. Reorder List
- leetcode143. Reorder List
- leetcode143~Reorder List
- leetcode143. Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- windows批处理学习1--基本语法
- Setup Ruby Gem on Windows
- 《深度探索C++对象模型》(五)
- Hive分区表修改表结构的问题
- 题目1206:字符串连接
- leetcode143. Reorder List
- 微信开发五 被动回复用户消息
- 【转】linux 下 apache启动、停止、重启命令
- linux环境下使用c语言实现shell(一)
- Android Glide框架简析:
- 题目1207:质因数的个数
- opencv提高之cascade分类器训练人脸检测模型
- 文摘:不值得做的事情,就不值得做好
- c++反向迭代器