143. 重排链表

发布于:2025-09-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

问题描述:

给定一个单链表 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,每天搞一道  。 


网站公告

今日签到

点亮在社区的每一天
去签到