/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
hair := &ListNode{Next:head}
prev:= hair
for head !=nil {
tail := prev
// 找到k和节点,不够直接返回
for i:=0;i<k;i++ {
tail = tail.Next
if tail == nil{
return hair.Next
}
}
// 记录下一个节点
nex := tail.Next
// 单纯完成反转链表
head, tail = myReverse(head, tail)
//返回的head和tail是目标节点,直接完成组装即可
tail.Next = nex
prev.Next = head
// 完成下一次的迭代准备
prev = tail
head = tail.Next
}
return hair.Next
}
func myReverse(head, tail *ListNode)(*ListNode,*ListNode){
// 这个完全可以创建一个空的节点
prev := &ListNode{Next:nil}
p := head
// 反转链表的常规操作
for prev!=tail{
nex := p.Next
p.Next = prev
prev = p
p = nex
}
return tail, head
}
LeetCode 25 k个一组反转链表
最新推荐文章于 2025-12-01 21:54:04 发布
该博客主要探讨了如何对单链表进行分组反转操作,通过定义一个辅助节点完成分组反转,并提供了基础的链表反转函数myReverse作为辅助。文章详细阐述了两种反转算法的逻辑,包括如何找到指定长度的链表尾部,如何反转链表以及如何重新组装链表。
347

被折叠的 条评论
为什么被折叠?



