gpt4 book ai didi

java - 从排序列表中删除重复项

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:24 25 4
gpt4 key购买 nike

例如:

  • 给定 1→1→2,返回 1→2。
  • 给定 1→1→2→3→3,返回 1→2→3。

我的问题是为什么返回的对象是head而不是node?为什么 node.next 意味着节点遍历移动到下一个节点?我很困惑:

public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null)
return null;
ListNode node = head;
while(node.next != null) {
if(node.val == node.next.val) {
node.next = node.next.next;
} else {
node = node.next;

}
}
return head;
}
}

最佳答案

为了帮助理解,我将在值后加上字母以查看不同的实例,例如如果原始列表是1→1→1→2→2→3→3,那就是1a→1b→1c→2a→2b→3a→3b

目标是去重,过程如下:

从头部开始:node = head


1a→1b→1c→2a→2b→3a→3b

删除 1b:node.next = node.next.next


1a→1c→2a→2b→3a→3b

删除 1c:node.next = node.next.next


1a→2a→2b→3a→3b

向前移动:node = node.next


1a→2a→2b→3a→3b

删除 2b:node.next = node.next.next


1a→2a→3a→3b

向前移动:node = node.next


1a→2a→3a→3b

删除 3b:node.next = node.next.next


1a→2a→3a

退出循环:node.next != null
返回更新列表:head


1a→2a→3a

如您所见,node.next = node.next.next 实际上并没有让您前进,而是让您朝着目标迈进了一步。

你必须返回head,否则你只会返回最后一个节点,即


3a

而你不希望这样。

关于java - 从排序列表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com