
【数据结构系列】链表合并问题——重排链表
发布日期:2021-05-07 21:21:45
浏览次数:26
分类:技术文章
本文共 1964 字,大约阅读时间需要 6 分钟。
题目描述
解题思路
- 我们知道
ArrayList
的底层就是用数组实现的,所以我们将链表储存在一个ArrayList
中,然后利用双指针,一个指向最前面,一个指向最后面,依次访问并向题目要求的链表形式进行转换!
public void reorderList_1(ListNode head) { if (head == null){ return; } Listlist = new ArrayList<>(); //ArrayList为线性表 //将链表的每一个节点依次存进ArrayList中 while (head != null){ list.add(head); head = head.next; } //两个之正依次向前,后进行遍历取元素 int i = 0,j = list.size() - 1; while (i < j){ //1->2->3->4 //前面的节点的下一个节点指向最后的节点 list.get(i).next = list.get(j); //1->4 i++; //此时i++ ,则此时list.get(i)为原来前面节点的下一个节点 即节点2 if(i == j) //若链表长度为偶数的情况下,则会提前相遇,则终止循环 break; list.get(j).next = list.get(i); // 4->2 //此时变为 1->4->2-> j--; } list.get(i).next = null; // 最后一个节点的下一个节点为null }
- 三步走:1. 将链表分为两个链表 2. 将第二个链表逆序 3. 依次连接两个链表
public void reorderList(ListNode head){ if (head == null || head.next == null || head.next.next == null) return; ListNode slow = head; ListNode fast = head.next; while (fast != null && fast.next != null){ slow = slow.next; fast = fast.next.next; } ListNode mid = slow.next; slow.next = null; //将链表一分为二 ListNode newHead = reverse(mid); //反转链表 while (newHead != null){ //反转后将两个链表进行合并 ListNode temp = newHead.next; newHead.next = head.next; head.next = newHead; head = newHead.next; newHead = temp; } } private ListNode reverse(ListNode head) { if (head == null) return head; ListNode tail = head; head = head.next; tail.next = null; while (head != null){ ListNode tmp = head.next; head.next = tail; tail = head; head = tmp; } return tail; }
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月12日 11时12分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(SpringMVC)springMVC.xml 和 web.xml
2019-03-04
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
2019-03-04
892 三维形体的表面积(分析)
2019-03-04
875 爱吃香蕉的珂珂(二分查找)
2019-03-04
Dijkstra算法的总结
2019-03-04
Vue实现选项卡功能
2019-03-04
vue中接收后台的图片验证码并显示
2019-03-04
趣谈win10常用快捷键
2019-03-04
王爽 《汇编语言》 读书笔记 三 寄存器(内存访问)
2019-03-04
JDK 内置的多线程协作工具类的使用场景
2019-03-05
Java 中哪些对象可以获取类对象
2019-03-05
11.2.6 时间值的小数秒
2019-03-05
Redis源码分析(七)--- zipmap压缩图
2019-03-05
自定义Hive Sql Job分析工具
2019-03-05
【MySQL】(九)触发器
2019-03-05
Oracle 11G环境配置
2019-03-05
【Python】(十二)IO 文件处理
2019-03-05
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
2019-03-05