- LeetCode 61. 旋转链表(Medium)/ 234. 回文链表(Easy)/ 148. 排序链表(Medium)/ 143. 重排链表(Medium)/ 328. 奇偶链表(Medium)
- 题解
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reorderList(self , head):
# write code here
if not head or not head.next: return
# 快慢指针寻找中间节点
fast = head
slow = head
while fast.next and fast.next.next:
fast = fast.next.next
slow = slow.next
# 获取后半部分的链表,并进行反转
after = slow.next
slow.next = None
pre = None
while after:
temp = after.next
after.next = pre
pre = after
after = temp
# 交叉合并两个链表
first = head
after = pre
while first and after:
# 暂存后一位的节点
ftemp = first.next
atemp = after.next
first.next = after # 指向另外一边的节点
first = ftemp # 后一位的节点作为新的头节点,相当于后移一位
after.next = first # 同上
after = atemp