# 算法：间隔重排序链表Reorder List

219 篇文章 6 订阅

## 题目

143. Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…

You may not modify the values in the list’s nodes, only nodes itself may be changed.

Example 1:

Given 1->2->3->4, reorder it to 1->4->2->3.


Example 2:

Given 1->2->3->4->5, reorder it to 1->5->2->4->3.


## 解题思路

1. 先找出一半的位置，用快慢两个指针可以找出。返回前半部分1->2->3->null，和后半部分链表4->5->6
2. 翻转后半部分链表6->5->4
3. 逐个合并前半部分链表，和翻转后的后半部分链表
# https://leetcode.com/problems/reorder-list/
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reorderList(self, head: ListNode) -> None:
"""
"""
return

reverse = self._reverseList(middle)

# Splits in place a list in two halves, the first half is --> in size than the second.
# @return A tuple containing the heads of the two halves
def _splitList(self, head: ListNode) -> (ListNode, ListNode):
while fast and fast.next:
slow = slow.next
fast = fast.next.next

middle = slow.next
slow.next = None

# Reverses in place a list.
# @return Returns the head of the new reversed list
def _reverseList(self, head: ListNode) -> ListNode:
last = None

while currentNode:
nextNode = currentNode.next
currentNode.next = last
last = currentNode
currentNode = nextNode

return last

# Merges in place two lists
# @return The newly merged list.
def _mergeLists(self, a: ListNode, b: ListNode) -> ListNode:
tail = a

a = a.next
while b:
tail.next = b
tail = tail.next
b = b.next
if a:
a, b = b, a


• 0
点赞
• 0
收藏
觉得还不错? 一键收藏
• 0
评论
08-22 451
08-24 609
11-12 153
08-22 349
02-12 372
08-27 172
01-02 1201
05-29 172
05-23 175
03-27 651
07-31 875

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。