https://leetcode.cn/problems/reorder-list/
给定一个单链表 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]
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
# 列表 + 双指针
lst, p = [], head
# 将节点放入列表中,注意不是节点值(val)
# 此时列表中储存的是节点,依然有.next的特性
while p:
lst.append(p)
p = p.next
# 使用列表的双指针和链表的.next
left, right = 0, len(lst) - 1
while left < right:
lst[right].next = lst[left].next
lst[left].next = lst[right]
left += 1
right -= 1
# 注意链表结尾
lst[left].next = None
return head