【问题标题】:What's wrong with my code to delete duplicate-value nodes from a sorted linked list?我从排序链表中删除重复值节点的代码有什么问题?
【发布时间】:2015-09-29 02:00:07
【问题描述】:

问题陈述: 从有序链表中删除重复值节点

输入格式:

您必须完成 Node* RemoveDuplicates(Node* head) 方法,该方法接受一个参数 - 排序链表的头部。您不应该从标准输入/控制台读取任何输入。

输出格式:

删除尽可能少的节点,以确保没有两个节点具有相同的数据。调整next指针,保证剩余节点形成一个单一的排序链表。然后返回排序后更新链表的头部。

我的代码:

Node RemoveDuplicates(Node head) {   
    Node n  = head;
    while(n.next!=null){
        Node test = n.next;
        while(n.data==test.data){
            if(test.next!=null){
                n.next = test.next;
                test = n.next;
            }
            else{
                n.next = null;
            }
        }
        if((n.next!=null)){
            n = n.next;
        }
    }
    return head;
}

经过测试,它运行良好,除非最后一个节点的值等于前一个节点的值。我在我的代码中找不到错误。

测试结果:

第一个 int 是测试用例的数量,第二个 int 是列表中的节点数。

问题已处理from HackerRank。

【问题讨论】:

    标签: java data-structures linked-list


    【解决方案1】:

    将你的内部while循环更改为

        while(n.next!=null && n.data==test.data){
           .....
        }
    

    当您的最后两个节点相等时,您正在制作n.next=null;,但您没有检查下一个是否为空,只是检查n.data && test.data,这导致了问题。

    【讨论】:

    • 解决了我的问题。你很棒。谢谢。
    【解决方案2】:

    你只是没有完成循环。

    让我们调试在这种情况下会发生什么,

    n.data = 15;
    n.next = test;
    test.data = 15;
    test.next == null;
    

    你的内部while循环将返回true,你将进入else条件。

    您正在设置n.next = null 并继续循环。 但循环条件保持不变......所以它会进入无限循环。

    修复: 设置n.next = null后跳出循环即可。

    else{
        n.next = null;
        break;
    }
    

    【讨论】:

    • 是的,解决了它。我可能忽略了 else 条件。非常感谢。
    【解决方案3】:

    代码也过于复杂。试试这个(现在无法测试):

    Node RemoveDuplicates(Node head) {   
        if (head == null) return null;
        Node prev  = head;
        Node curr = head.next;
        while(curr != null){
            if (prev.data == curr.data)
                prev.next = curr.next;
             else
                 prev = prev.next;
             curr = curr.next;
        }
        return head;
    }
    

    【讨论】:

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