[leetcode] 【链表】143. Reorder List
来源:互联网 发布:软件开发 杭州 编辑:程序博客网 时间:2024/04/29 07:21
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→…
必须是在固定空间进行,不能改变节点的值。
题解
从链表中间把链表断开,分成两部分。后一部分进行翻转,即:L0→L1→L2→… Ln→Ln-1→Ln-2→… 这样
翻转部分参考:链表翻转
然后两个指针指向两个链表,然后连起来即可。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reorderList(ListNode* head) { if(!head||!head->next) return; ListNode *fast=head,*slow=head,*prev=NULL; while(fast&&fast->next) { prev=slow; fast=fast->next->next; slow=slow->next; } prev->next=NULL; 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||!head->next) return head; ListNode *prev=head; for(ListNode *cur=head->next,*next=cur->next;cur; prev=cur,cur=next,next=next? next->next:NULL) cur->next=prev; head->next=NULL; return prev; }};
0 0
- [leetcode] 【链表】143. Reorder List
- [LeetCode]143.Reorder List
- LeetCode 143. Reorder List
- [leetcode] 143.Reorder List
- leetcode 143. Reorder List
- 143. Reorder List LeetCode
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode *** 143. Reorder List
- [Leetcode] 143. Reorder List
- leetcode.143. Reorder List
- LeetCode 143. Reorder List
- LeetCode-143.Reorder List
- LeetCode - 143. Reorder List
- LeetCode 143. Reorder List
- leetcode 143. Reorder List
- Leetcode 143. Reorder List
- jsp中页面编码的几种方式
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- Android 星星评价
- meta标签定义
- hadoop搭建配置信息
- [leetcode] 【链表】143. Reorder List
- C#/串口助手开发
- 多媒体_视频播放器
- Search in Rotated Sorted Array(hard)
- 文本固定长度如:电话号码处理。
- 如何设定Toast显示时间。
- FICO总账余额相关的事务码
- Hive 的性能调优总结
- PHP和Android之间的通信