143. Reorder List
来源:互联网 发布:c盘中windows.old 编辑:程序博客网 时间:2024/06/03 08:17
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}
.
将一个链表重排顺序,排成L0→Ln→L1→Ln-1→L2→Ln-2→…这样的形式。想法是找出链表的中间点,以中间点为分隔点分成两条链表,然后将后面的链表倒转,最后交错合并两个链表即可。
代码:
class Solution{public:void reorderList(ListNode* head) {if(!head || !head->next || !head->next->next) return;ListNode* ptr = head, * mid = head;int size = 0;while(ptr){++size;ptr = ptr->next;}ptr = head;for(int i = 0; i < (size - 1) / 2; ++i){ptr = ptr->next;}mid = ptr->next;ptr->next = NULL;mid = reverseList(mid);mergeList(head, mid);}ListNode* reverseList(ListNode* head){ListNode* tmp, * next = NULL;while(head->next){tmp = head->next;head->next = next;next = head;head = tmp;}head->next = next;return head;}void mergeList(ListNode* head1, ListNode* head2){while(head1 && head2){ListNode* tmp1 = head1->next, * tmp2 = head2->next;head1->next = head2;head2->next = tmp1;head1 = tmp1;head2 = tmp2;}}};
0 0
- [LeetCode]143.Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- [leetcode] 143.Reorder List
- 143. Reorder List
- 143. Reorder List
- leetcode 143. Reorder List
- 143. Reorder List LeetCode
- 143. Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- 143. Reorder List
- LeetCode *** 143. Reorder List
- 143. Reorder List
- 十大Intellij IDEA快捷键
- 食屎啦你
- 简单脚本获取元素笔记
- Android5.0 Activity的跳转动画
- tensorflow MLP
- 143. Reorder List
- 启动mysql出错:Can't find messagefile '/usr/share/mysql/errmsg.sys
- react native ios打包到真机
- 学习C++ primer plus 第9章编程练习1
- 数据挖掘-Iris数据集分析-决策边界(六)
- InfoGAN论文笔记+源码解析
- PLSQL Package Initialize Block
- removeEventListener('2016');
- 模型评估与选择