[LeetCode] 143. 重排链表
Posted ACBingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 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. 重排链表的主要内容,如果未能解决你的问题,请参考以下文章