当前位置: 首页 > 面试题库 >

Java从链表中删除重复项

容宏逸
2023-03-14
问题内容

我想从排序的链表{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下的元素与列表中的第一项进行比较,这是不正确的。

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



 类似资料:
  • 问题内容: 数据库类型为PostGres 8.3。 如果我写了: 我有一些计数超过1的行。如何取出重复的行(我仍然希望每个行都保留1行,而不是+1行…我不想删除所有行。) 例子: 应该变成: 我找到的唯一答案是 在那里,但是我想知道是否可以在没有哈希列的情况下做到这一点。 警告 我没有具有唯一编号的PK,因此无法使用min(…)技术。PK是3个字段。 问题答案: 这是所有表都应具有主键的众多原因之

  • 结果:[1,2,3,3,3,4,4][1,2,3,3,3,4,4]

  • 其中DataCord是一个类 并且调谐器应该是唯一的

  • 问题内容: 我想从列表中删除重复项,但我无法正常工作: 问题答案: 如果该代码不起作用,则可能是你未在该类上正确实现。 大概有一些钥匙(我们称之为)可以唯一地标识一个客户。例如 的适当定义equals(Object)如下所示: 为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals: 还值得注意的是,如果列表很大,

  • 我需要返回带有删除的所有重复元素的链表的头部。我理解这个问题的逻辑,但我在使用递归时变得困惑。 如果我在If条件之前调用函数RemoveDuplicates(head.next);很好用。但是,如果我交换语句的顺序(rest所有内容都完全相同),如下所示: 代码无法正确解决像'1->1->1->1'这样的测试用例。在后一种情况下,我得到的输出是'1->1'。 我真的想要一些关于我如何更好地理解递归

  • 我试图从排序的单链表中删除重复的值。 这是我的密码 SinglelyLinkedListNode*移除的副本(SinglelyLinkedListNode*头){ } 然而,当单向链表为3-时,代码失败