def reverse_list(head): pre = None cur = head while cur: nxt = cur.next # 保存下一个节点 cur.next = pre # 反转指针 pre = cur # pre 前移 cur = nxt # cur 前移 return pre # 新头节点
模板 3:合并有序链表
def merge_two_lists(l1, l2): dummy = ListNode(0) cur = dummy while l1 and l2: if l1.val <= l2.val: cur.next = l1 l1 = l1.next else: cur.next = l2 l2 = l2.next cur = cur.next cur.next = l1 if l1 else l2 return dummy.next
模板 4:找倒数第 K 个节点(快慢指针)
def remove_nth_from_end(head, n): dummy = ListNode(0, head) fast = slow = dummy # fast 先走 n+1 步 for _ in range(n + 1): fast = fast.next # fast 到尾时,slow 指向待删节点的前一个 while fast: fast = fast.next slow = slow.next slow.next = slow.next.next return dummy.next
模板 5:K 个一组翻转链表
def reverse_k_group(head, k): dummy = ListNode(0, head) pre = dummy while True: # 检查是否有 k 个节点 cur = pre for _ in range(k): cur = cur.next if not cur: return dummy.next # 翻转 k 个节点 group_head = pre.next next_group = cur.next pre.next = reverse_sublist(group_head, k) group_head.next = next_group pre = group_headdef reverse_sublist(head, k): pre = None cur = head for _ in range(k): nxt = cur.next cur.next = pre pre = cur cur = nxt return pre