gpt4 book ai didi

Java删除链表中的重复项

转载 作者:行者123 更新时间:2023-12-01 19:07:41 26 4
gpt4 key购买 nike

我想从排序链表 {0 1 2 2 3 3 4 5} 中删除重复项。

`

public Node removeDuplicates(Node header)
{
Node tempHeader = null;
if(header != null)
tempHeader = header.next;
else return header;
Node prev = header;
if((tempHeader == null)) return header ;

while(tempHeader != null)
{
if(tempHeader.data != prev.data)
{
prev.setNext(tempHeader);
}
tempHeader = tempHeader.next;
}
prev = header;
printList(prev);
return tempHeader;
}

`

prev.setNext(tempHeader) 在 while 循环内无法正常工作。理想情况下,当 prev = 2 且 tempHeader = 3 时,prev.next 应该是 data = 3 的节点。

Printlist 函数仅获取标题指针并打印列表。

节点定义如下。

public class Node
{
int data;
Node next;

public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}

最佳答案

循环已排序,因此您知道重复项将彼此相邻。如果您想就地编辑列表,则必须有两个列表指针(您确实这样做了)。您称为 tempHeader 和 prev 的那个,您必须在进行时将它们都推进到列表中(我在代码中没有看到)。否则,如果您不前进 prev 指针,那么您总是将 tempHeader 下的元素与列表中的第一项进行比较,这是不正确的。

然而,更简单的方法是随时构建一个新列表。只需记住添加到列表中的最后一项的值即可。然后,如果您要插入的列表相同,则只需不插入它,完成后,只需返回新列表即可。

关于Java删除链表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459557/

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