K个一组翻转链表

题目

K个一组翻转链表

思路

题目理解的核心:就像一块蛋糕,每次吃的时候,切割出来一小块,剩下的蛋糕不动,当我们吃完了这一小块,继续从剩下的蛋糕中再切割出来一块来吃

  • K个一组翻转链表,那肯定要先找到这一组链表的【头节点】和【尾节点】,针对这一小段链表进行翻转。翻转成功以后,继续找下一小段链表进行翻转;当每一次的小段链表都完成了翻转,整个链表也就完成了翻转;
  • K个一组翻转链表

完整代码

结合上图代码应该很容易看的懂

/**
* 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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!