Java关于重排链表详细解析
程序员文章站
2022-03-04 12:22:15
1.题目给定一个单链表 l 的头节点 head ,单链表 l 表示为: l0→ l1 → … → ln-1 → ln 请将其重新排列后变为:l0 → ln → l1 → ln-1 → l2 → ln...
1.题目
给定一个单链表 l 的头节点 head ,单链表 l 表示为:
l0→ l1 → … → ln-1 → ln 请将其重新排列后变为:
l0 → ln → l1 → ln-1 → l2 → ln-2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
来源:力扣(leetcode)
2.解析
将一个链表分为两个子链表,然后将其归并。
我们要先找到链表的中间节点,在中间节点将其断开
然后反转后半链表
再将两个子链表逐个连起来
将后半链表反转,独立成一个子链表。
最后将两个子链表的节点逐个连接就ok了
3.代码
class solution { public void reorderlist(listnode head) { listnode fast = head; listnode slow = head; //找中间节点 while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } //截断链表 listnode cur = slow.next; slow.next = null; //反转后半链表 listnode node = null; while (cur != null) { listnode curnext = cur.next; cur.next = node; node = cur; cur = curnext; } //合并 listnode prev = head; listnode l1 = node; while (l1 != null) { listnode next1 = prev.next; listnode next2 = l1.next; prev.next = l1; l1.next = next1; prev = next1; l1 = next2; } } }
到此这篇关于java关于重排链表详细解析的文章就介绍到这了,更多相关java 重排链表内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
详细解析:关于PHP事件驱动问题_PHP教程
-
关于java解析文本文档 Web综合
-
Java中多线程的使用(超级超级详细)线程安全原理解析 4
-
Java网络编程——UDP通信原理(超详细解析一看就懂哦!!!)
-
关于Java后台解析json时报的错java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntim
-
关于Java提高篇的详细介绍
-
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
-
剑指Offer系列(java版,详细解析)53.在排序数组中查找数字
-
Java基本类型与包装类详细解析
-
java解析xml文件的四种方法详细讲解