LeetCode 143. Reorder List
来源:互联网 发布:网络最红歌曲排行榜 编辑:程序博客网 时间:2024/06/04 18:21
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
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}
.
解题思路:计算链表总结点数,然后将后一半节点与前一半节点断开,并将后一半链表原地翻转,然后依次扫描前半链表与后半链表,将后半链表的节点插入到合适的地方。
public class Solution { public void reorderList(ListNode head) { if(head!=null && head.next!=null && head.next.next!=null){ //这三种情况下,链表不用调整 int count=0; ListNode p=head; while(p!=null){ //计算出链表的总节点个数 count++; p=p.next; } p=head; int i=1; while(i<=count/2){ //当节点总数为奇数时,等号保证了中间节点分到了前半链表 i++; p=p.next; } //while循环结束后p指向前半链表的最后一个节点 ListNode headb=p.next; //headb始终指向后半节点的头节点 p.next=null; ListNode q=headb; //定义节点q,q向后移动,这里先定义,随便赋值为headb if(headb.next!=null){ q=headb.next; headb.next=null; //一定要截断headb与后面节点的联系 while(q!=null){ ListNode r=q; q=q.next; r.next=headb; headb=r; } } p=head;q=headb; while(p!=null && q!=null){ ListNode pa=p.next; //记录后面的指针,不能将p、q直接赋值给新节点 ListNode qa=q.next; q.next=null; //先截断原链表 q.next=p.next; p.next=q; p=pa; q=qa; } } }}
0 0
- [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
- [LeetCode] 143. Reorder List
- C语言中将字符串转换为数字的方法
- $.post与springmvc数据交互
- MySQL
- TensorFlow笔记之基础总结
- java中static修饰符
- LeetCode 143. Reorder List
- PS快捷键
- 基于 Django1.10 文档的深入学习(14)—— Request and response objects 之 HttpResponse objects
- springmvc(二)---controller中方法的三种返回值形式
- 分布式业务系统的一致性
- [BZOJ1177][Apio2009]Oil(暴力模拟)
- hibernate4 批量删除
- Adapter 适配器模式
- 电路原理实验八:受控源特性测试