题目

思路
题目理解的核心:就像一块蛋糕,每次吃的时候,切割出来一小块,剩下的蛋糕不动,当我们吃完了这一小块,继续从剩下的蛋糕中再切割出来一块来吃
完整代码
结合上图代码应该很容易看的懂
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
a,b := head,head
//截取一个链表
for i :=0;i < k;i++{
if b == nil {
return head
}
b = b.Next
}
//翻转链表
last := reverse(a,b)
//链表的尾部,拼接剩余待翻转的链表
a.Next = reverseKGroup(b,k)
return last
}
//翻转链表(指定范围),返回头节点
func reverse(a,b *ListNode) *ListNode {
var pre *ListNode = nil
for a != b {
temp := a
a = a.Next
temp.Next = pre
pre = temp
}
return pre
}
原文始发于微信公众号(nullbody笔记):K个一组翻转链表
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/223800.html