[LeetCode] 143. 重排链表

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 143. 重排链表相关的知识,希望对你有一定的参考价值。

这个题感觉很不错,链表中的部分反转问题、快慢指针问题都可以考察到。

首先,利用快慢指针,找到链表的中位节点,然后对后半部分链表反转。然后对前半部分链表隔一个插入一个就可以了。

143. 重排链表

``` class Solution { public void reorderList(ListNode head) { ListNode fast = head; ListNode slow = head;
    while (fast != null) {
        fast = fast.next;
        if (fast == null) break;
        slow = slow.next;
        fast = fast.next;
    }

    fast = reverse(slow.next);
    
    slow.next = null;
    slow = head;
    while (fast != null) {
        ListNode next = slow.next;

        slow.next = fast;
        fast = fast.next;

        slow.next.next = next;
        slow = slow.next.next;
    }
}

private ListNode reverse(ListNode head) {
    if (head == null) return null;

    ListNode cur = head;
    ListNode last = null;
    ListNode next = null;
    while (cur != null) {
        next = cur.next;
        cur.next = last;

        last = cur;
        cur = next;
    }

    return last;
}

}

以上是关于[LeetCode] 143. 重排链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:143. 重排链表

Leetcode 143 重排链表

LeetCode - 143 - 重排链表 - Java - 两种解法 - 细致

Leetcode 143.重排链表

LeetCode Java刷题笔记—143. 重排链表

LeetCode 143.重排链表