根据您提供的代码,问题出在以下部分:
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助手提供,问题来源于学员提问