ZBLOG

/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func handle(head, tail *ListNode, k int) { node := head for node != tail { tmp := node.Next node.Next = ...

根据您提供的代码,问题出在以下部分:

if node == nil {
    //  最后不足 k 个,直接返回
    return head
}

这个判断条件是错误的。如果最后不足 k 个节点,应该直接返回反转后的结果链表 result.Next 而不是原始链表头部 head。因为在处理过程中已经将 result.Next 指向了头部。

以下是修正后的代码:

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func handle(head, tail *ListNode, k int) {
    node := head
    for node != tail {
        tmp := node.Next
        node.Next = tail.Next
        tail.Next = node
        node = tmp
    }
}

func reverseKGroup(head *ListNode, k int) *ListNode {
    result := &ListNode{}
    result.Next = head
    
    node := head
    for node != nil {
        count := 1
        tmphead := node
        
        for node != nil && count < k {
            count++
            node = node.Next
        }
        
        var tmp *ListNode
        if count <= k {
            tmp = node.Next
            handle(tmphead, node, k)
            result.Next = tmphead // 更新结果链表的下一个节点为反转后的头部

            // 当最后不足 k 个节点时,直接返回反转后的结果链表而不是原始链表头部。
            if tmp == nil && count < k {
                return result.Next 
            }
            
        } else {
            return result.Next // 最后不足 k 个,直接返回
        }
        
        node = tmp
    }
    
    return result.Next
}

希望这次能够解决您的问题。请再次注意在实际使用中进行充分测试和验证代码逻辑的正确性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=11439

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?