214 words
1 minute
日拱两卒(八)
2026-08-06
30
两两交换链表中的节点。
和K个一组翻转没区别。
class Solution: def reverse(self, head: Optional[ListNode]) -> Optional[ListNode]: cur = head pre = None
while cur: nxt = cur.next cur.next = pre pre = cur cur = nxt
return pre
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]: dummy = ListNode(0, head)
cur = dummy.next cur_head = cur pre_cur_head = dummy cnt = 0
while cur: cnt += 1 nxt = cur.next if cnt >= 2: cur.next = None new_head = self.reverse(cur_head) cur_head.next = nxt pre_cur_head.next = new_head
pre_cur_head = cur_head cur_head = nxt cnt = 0
cur = nxt
return dummy.next29
删除链表的倒数第N个节点。
尺子一开始左端点在链表头,右端点在正数第N个,那么尺子右端点在链表尾时,左端点就在倒数第N个。
删除其实是要找第N+1个。
class Solution: def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]: left = right = dummy = ListNode(0, head)
for _ in range(n): right = right.next while right.next: left = left.next right = right.next left.next = left.next.next
return dummy.next