【问题标题】:Delete duplicate nodes from sorted linked list从排序链表中删除重复节点
【发布时间】:2020-04-14 10:53:11
【问题描述】:

下面的代码 sn-p 是从排序的链表中删除重复的。请建议我进行更改以更正代码,因为节点值 3 3 3 4 5 5 的输出错误。预期输出是 3 4 5 而我得到的是 3 4 5 5 。

static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode head) {


SinglyLinkedListNode temp,temp1;
if((head==null)||(head.next==null))
    return head;

for(temp=head;temp.next!=null;temp=temp.next)
{

    for(temp1=temp.next;temp1.next!=null;temp1=temp1.next)
    {
        if(temp.data==temp1.data)
        {
            temp.next=temp.next.next;
        }
    }
}

return head;

}

【问题讨论】:

  • 您的循环结束条件减一。您正在检查temp.next != nulltemp1.next != null,这意味着temptemp1 都不会是您列表中的最后一个元素,这就是为什么您的最后一个5 没有被删除。跨度>

标签: java data-structures linked-list


【解决方案1】:

只需 3 处更改,

  1. 一个额外的条件来检查我们是否检测到重复元素并且我们有 是否到达链表的末尾,根据这个条件我们可以决定 是否将 temp 指向下一个节点或在此处结束我们的链表。
  2. 现在我们需要注意第二个 for 循环条件,因为我们现在要遍历到结束节点,所以我们必须将条件设置为 temp1 != null(而不是 temp1.next!=null)。
  3. 在最顶层的循环中,我们还需要将条件设置为 temp != null( 而不是 temp.next!=null)。就是这样。

完整的更新代码:

static SinglyLinkedListNode removeDuplicates(SinglyLinkedListNode head) {

    SinglyLinkedListNode temp,temp1;

    if((head==null)||(head.next==null))
        return head;

    for(temp=head;temp!=null;temp=temp.next)
    {

        for(temp1=temp.next;temp1!=null;temp1=temp1.next)
        {
            if(temp.data==temp1.data)
            {
                if(temp.next.next != null){
                    temp.next=temp.next.next;
                } else {
                    temp.next = null
                }
            }
        }
    }

    return head;

}

希望有帮助!

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 2022-01-07
    • 2014-08-15
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2013-04-28
    相关资源
    最近更新 更多