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 直接连接到当前非重复节点,而不是简单地赋值。

这里是修正后的代码:

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func deleteDuplicates(head *ListNode) *ListNode {
  9. virtualHead := &ListNode{}
  10. virtualHead.Next = head
  11. result := virtualHead // 直接让 result 指向虚拟头
  12. slow := virtualHead
  13. fast := head // 从 head 开始遍历
  14. for fast != nil {
  15. // 检查是否有重复的值
  16. if fast.Next != nil && fast.Val == fast.Next.Val {
  17. // 找到最后一个相同值的节点
  18. for fast.Next != nil && fast.Val == fast.Next.Val {
  19. fast = fast.Next
  20. }
  21. // 将 slow 的 next 跳过所有相同值的节点
  22. slow.Next = fast.Next
  23. } else {
  24. // 如果没有找到重复,则慢指针可以前进一步
  25. slow = slow.Next
  26. }
  27. // 前进快指针
  28. fast = fast.Next
  29. }
  30. return result.Next // 返回去掉虚拟头后的链表
  31. }

修正要点:

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?