问题描述:
给定一个单链表 L
的头节点 head
,单链表 L
表示为:
L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4] 输出:[1,4,2,3]
示例 2:
输入:head = [1,2,3,4,5] 输出:[1,5,2,4,3]
提示:
- 链表的长度范围为
[1, 5 * 104]
1 <= node.val <= 1000
上代码,拿去就可执行:
package onlyqi.daydayupgo06.leetcode;
import java.util.Objects;
public class leetcode143 {
// 定义双向链表节点
static class DLinkedNode {
int value;
DLinkedNode next;
public DLinkedNode() {
}
public DLinkedNode(int _value) {
value = _value;
}
public DLinkedNode(int _value, DLinkedNode _next) {
value = _value;
next = _next;
}
}
public static void main(String[] args) {
DLinkedNode dLinkedNode5 = new DLinkedNode(5);
DLinkedNode dLinkedNode4 = new DLinkedNode(4, dLinkedNode5);
DLinkedNode dLinkedNode3 = new DLinkedNode(3, dLinkedNode4);
DLinkedNode dLinkedNode2 = new DLinkedNode(2, dLinkedNode3);
DLinkedNode dLinkedNode1 = new DLinkedNode(1, dLinkedNode2);
reorderList(dLinkedNode1);
}
public static void reorderList(DLinkedNode head) {
DLinkedNode tail = head;
while (!Objects.isNull(tail.next.next)) {
tail = tail.next;
}
DLinkedNode curr = tail.next;
tail.next = null;
curr.next = head.next;
head.next = curr;
while (!Objects.isNull(head)) {
System.out.println(head.value);
head = head.next;
}
}
}
我要刷300道算法题,第145道 。 尽快刷到200,每天搞一道 。