使用键从链表中删除节点



我想从链表中删除一个节点。链接列表包含以下类型的数据(包含有空格的数据(

aa 1 1 1 1
bb 2 2 2 2 
ab 3 3 3 3
cc 4 4 4 4 
dd 5 5 5 5

问题是我的代码只删除了我用dd 5 5 5 5创建的最后一个节点,而没有其他内容!请阅读我的代码,并向我建议任何解决方案,为什么会发生在我身上?

public Node del(String key){
        Node p=first;
        for(Node c=first;c!=null;c=c.next)
        {
           if(c.data.startsWith(key)){
              if(c.next==null){
                  return null;
              }else{
                   p=c;
              }
              if(c==first)
                  first=first.next;
              else
                  p.next=c.next;
              return c;
           }
        }
        return null;
    }

提前感谢!

在迭代中,您需要维护当前节点(c(和上一个节点('p'(。然后,如果您发现c具有您要查找的密钥,则设置p.next = c.next。这将从列表中删除c。然后测试空列表、带有一个元素的列表和带有两个元素的清单的代码,因为在这些特殊情况下,您需要以不同的方式处理删除。

您的代码有几个问题。唯一实际有效的情况是删除列表的第一个元素。

我认为找到正确的解决方案比我给你的时候学到了更多。试着在纸上画出列表的草图,并在程序运行时观察变量pc所指的节点。

当单步执行程序时,在调试器中查看执行情况也可能很有帮助。

更改您的逻辑如下:

public Node del(String key)
{
    Node p = null;
    for(Node c=first;c!=null;p=c;c=c.next)
    {
       if(c.data.startsWith(key))
       {
           if(c==first)
               first=first.next;
           else
               p.next=c.next;
           c.next = null;
           return c;
       }
    }
    return null;
}

若要删除链接列表中的节点,则应具有对其上一个节点的引用。CCD_ 6是在当前节点CCD_。检查如何修改for循环。

您的主要问题(还有其他问题,但我将重点讨论您要求的问题(是p总是指向第一个链接。当你找到钥匙时,你会执行p.next = c.next,所以如果你的物品是在最后一个链接上找到的,那么first.next将跳过所有其他有效链接指向最后一个链路。

例如:

1->2->3->4->5

如果我查找键=4,则列表将显示为:

1->5

for(currentnode=start; currentnode!=null; currentnode=currentnode.delnext){
        if(currentnode.deldata.startsWith(mykey)){
                        if(currentnode==start)
                            start=start.delnext;
                        else
                            prevnode.delnext=currentnode.delnext;
                        currentnode.deldata=null;
        }
        prevnode=currentnode;
    }
    }

这个代码会像符咒一样工作,我已经更正了我的代码!感谢上帝

相关内容

  • 没有找到相关文章

最新更新