LeetCode钻研7 链表的后半与前半进行穿插
来源:互联网 发布:淘宝网衣服男装上衣 编辑:程序博客网 时间:2024/05/21 06:52
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}.
public class Solution {
public void reorderList(ListNode head) {
if(head == null || head.next == null) return;
ListNode mid = head;
ListNode fast = head;
while (fast.next != null && fast.next.next != null) {
fast = fast.next.next;
mid = mid.next;
}
mid.next = reverse(mid.next);
merge(head, mid, mid.next);
}
public static ListNode reverse(ListNode head) {
ListNode pre = head;
ListNode cur = head.next;
ListNode temp;
while (cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
head.next = null;
return pre;
}
public static void merge(ListNode head1, ListNode end1, ListNode head2) {
ListNode cur1=head1;
ListNode cur2=head2;
ListNode temp1;
ListNode temp2;
while(cur1!=end1)
{
temp1=cur1.next;
cur1.next=cur2;
cur1=temp1;
temp2=cur2.next;
cur2.next=cur1;
cur2=temp2;
}
cur1.next=cur2;
}
}
1 遇到不好的思路要果断放弃,改其他的思路
2 参考代码有不好理解的,就自己写,浪费在读别人难懂代码的时间远比不上自己写来的快。
3 链表的永恒主题是每个节点在使用时,记得用temp存储它的下一个节点。
0 0
- LeetCode钻研7 链表的后半与前半进行穿插
- leetcode钻研5 链表的插入排序
- leetCode钻研6 二叉树的后序遍历
- LeetCode钻研8 前序遍历树
- LeetCode钻研9 判断链表是否有环
- LeetCode- 树的前序、中序、后序遍历(递归与迭代)
- leetcode钻研2 后续表达式
- 前增量与后增量的区别
- 毕业前与毕业后的区别
- 传入一个时间戳,传入后,会与本地的时间进行对比,得到返回的字符串,有一小时前,一天前,等等
- 前++与后++
- leetcode钻研3 串最多点的直线上面点的个数(二维)
- leetcode钻研1 求树最短路径到叶子
- 数据段与代码段穿插
- Quartus ii与 Modelsim结合进行前仿真和后仿
- 男生能做到的前十个与后十个
- const在函数前与函数后的区别
- const在函数前与函数后的区别
- Objective-C属性详解(附代码)
- 用Struts2做开发时需要导入的包
- Objective-C类别和协议
- Appium英文书推荐
- Android Studio中jni的使用
- LeetCode钻研7 链表的后半与前半进行穿插
- 书籍复印
- Android异步处理的几种方式(附demo)
- js单引号和双引号区别
- Executor与四种线程池
- https安全在哪里,原理是什么?
- Android 5.X Activity过渡动画,以及漂亮的共享元素效果
- rabbitmq 和 kafka 简单的性能测试
- 类似QQ导航底部显示提示弹窗,能自动消失