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.next

29#

删除链表的倒数第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