https://leetcode.com/problems/reverse-nodes-in-k-group/
我愿称之为,最强链表操作题。
没有花里胡哨的东西,思路也很清楚,就是个模拟题,但是如何优雅的写出来,同时考虑边界情况,不是那么容易。

个人解答

  1. # Definition for singly-linked list.
  2. # class ListNode:
  3. # def __init__(self, val=0, next=None):
  4. # self.val = val
  5. # self.next = next
  6. class Solution:
  7. def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
  8. dummy = ListNode(0, head)
  9. def reverse(prev, tail, k):
  10. p = prev.next
  11. newNext = tail
  12. for i in range(k):
  13. nxt = p.next
  14. p.next = newNext
  15. newNext = p
  16. p = nxt
  17. newTail = prev.next
  18. prev.next = newNext
  19. return newTail
  20. cnt = 0
  21. p = dummy.next
  22. prev = dummy
  23. while p:
  24. cnt += 1
  25. p = p.next
  26. if cnt % k == 0:
  27. tail = reverse(prev, p, k)
  28. prev = tail
  29. return dummy.next

题目分析

没什么好说的,就是模拟。
注意定义好,每个部分负责哪些指针,保证所有指针指向正确的地方。