📑 题目:25. K 个一组翻转链表

🚀 本题 LeetCode 传送门

题目大意

按照每 K 个元素翻转的方式翻转链表。如果不满足 K 个元素的就不翻转。

解题思路

这一题是 problem 24 的加强版,problem 24 是两两相邻的元素,翻转链表。而 problem 25 要求的是 k 个相邻的元素,翻转链表,problem 相当于是 k = 2 的特殊情况。

代码

  1. package leetcode
  2. /**
  3. * Definition for singly-linked list.
  4. * type ListNode struct {
  5. * Val int
  6. * Next *ListNode
  7. * }
  8. */
  9. func reverseKGroup(head *ListNode, k int) *ListNode {
  10. node := head
  11. for i := 0; i < k; i++ {
  12. if node == nil {
  13. return head
  14. }
  15. node = node.Next
  16. }
  17. newHead := reverse(head, node)
  18. head.Next = reverseKGroup(node, k)
  19. return newHead
  20. }
  21. func reverse(first *ListNode, last *ListNode) *ListNode {
  22. prev := last
  23. for first != last {
  24. tmp := first.Next
  25. first.Next = prev
  26. prev = first
  27. first = tmp
  28. }
  29. return prev
  30. }