25.H K 个一组翻转链表
Problem: 25. K 个一组翻转链表
思路
采用递归算法。
如果链表为空,或者链表长度小于k,那么直接返回。否则,反转前k个。然后递归反转链表后半段。
Code
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
len := 0
p := head
for p != nil {
len++
p = p.Next
}
// 加上等于0的情况,是为了避免空指针
if len == 0 || len < k {
return head
}
var newHead *ListNode
cur := head
for i := 0; i < k; i++ {
next := cur.Next
cur.Next = newHead
newHead = cur
cur = next
}
head.Next = reverseKGroup(cur, k)
return newHead
}
Last updated
Was this helpful?