ZBLOG

/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func deleteDuplicates(head *ListNode) *ListNode { virtualHead := &ListNode{} virtualHead.Next = head result := &ListNode...

你的代码存在一些逻辑错误,特别是在处理重复节点和移动指针的部分。以下是对你代码的修正:

  1. 在判断重复节点时,需要在内部循环中跳过所有重复的节点,并确保 fast 指向下一个非重复节点。
  2. 在跳过所有重复节点后,你需要将 slow.Next 直接连接到当前非重复节点,而不是简单地赋值。

这里是修正后的代码:

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
    virtualHead := &ListNode{}
    virtualHead.Next = head

    result := virtualHead // 直接让 result 指向虚拟头
    slow := virtualHead

    fast := head // 从 head 开始遍历

    for fast != nil {
        // 检查是否有重复的值
        if fast.Next != nil && fast.Val == fast.Next.Val {
            // 找到最后一个相同值的节点
            for fast.Next != nil && fast.Val == fast.Next.Val {
                fast = fast.Next
            }
            // 将 slow 的 next 跳过所有相同值的节点
            slow.Next = fast.Next 
        } else {
            // 如果没有找到重复,则慢指针可以前进一步
            slow = slow.Next 
        }
        // 前进快指针
        fast = fast.Next 
    }

    return result.Next // 返回去掉虚拟头后的链表
}

修正要点:

  1. 检查并跳过所有重复项:当发现一系列相同值时,需要继续移动 fast 指针,直到遇到不同的值。
  2. 更新 slow 的指向:只有当没有找到相同的元素时,才可以让 slow 向前移动。
  3. 返回正确结果:最终返回的是 result.Next,以排除虚拟头结点。

希望这能帮助你解决问题!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?