【问题标题】:SortedLinkedList Remove methods head, tail, between two nodesSortedLinkedList 删除方法头,尾,两个节点之间
【发布时间】:2015-11-26 08:54:01
【问题描述】:

我需要删除 SortedLinkedList 中的一个键,但我不能。没有语法错误,但代码不起作用。删除节点列表的乞求、结束和中间的方法。这是我的删除方法:

    public void Remove(int key){

      LinkedListNode find = Find(key);
      if(find == null){
          System.out.println("Item is not found.");
      return;}

      LinkedListNode helper = new LinkedListNode();
        helper.next = head;
        LinkedListNode p = helper;

        while(p.next != null){
            if(p.next.key == key){
                LinkedListNode next = p.next;
                p.next = next.next; 
            }else{
                p = p.next;
            }
            return;
        } 
        noOfNodes--; 
    }

    public void Remove(LinkedListNode node)  {
        Remove(node.key);
    }

另一个代码:

     public void Remove(int key){
      LinkedListNode temp = Find(key);
      if(temp==null)
      {
          System.out.println("Item not found");
          return;
      }
      if(head==tail){
          head=null;
          tail=null;
      }

     else if(temp.key==head.key){
             head=temp.next;
                 head.prev=null;
         //
     }else if(temp.key==tail.key){
         tail=tail.prev;
         tail.next=null;
     }else { 
         temp.prev.next=temp.next;
         temp.next.prev=temp.prev;
     }
         noOfNodes--;
  } 

     public void Remove(LinkedListNode node){
     Remove(node.key);
  } 

提前致谢!

【问题讨论】:

  • 你如何设置头部?现在我认为它不会编译...
  • 请更具体。究竟什么不起作用?你有错误吗?哪一种?
  • 没有错误但运行时错误。我删除了一些头并打印了我的列表并删除了仍然存在的节点。相同情况的尾节点。

标签: java sortedlist


【解决方案1】:

问题来了:

while(p.next != null){
            if(p.next.key == key){
                LinkedListNode next = p.next;
                p.next = next.next; 
            }else{
                p = p.next;
            }
            return;  //--> why are you returning here ... Line 1
        } 

从第 1 行返回,意味着您刚刚检查了第一个值,判断它是否等于键或不等于键,您只是打破了 while 循环并返回到调用方法或父方法。这绝对不会删除价值。

【讨论】:

  • 我删除了返回并再次运行。我去掉了中间和尾部,但没有去掉头部。头它不工作。
  • 让我再次检查代码...如果您喜欢我的回答,请接受。
  • 我才意识到。代码正在删除列表,但列表视图不会删除。示例:+--------+--------+ |索引 |关键 | +--------+--------+ |0| 1| |1| 2| +--------+--------+ |该列表有 1 个节点 +--------+--------+ -------------- --------------------------------
  • if(head==tail){ // --> 这个条件必须包含一个额外的条件,即head.key == tail.key,即只有一个元素并且元素是键的情况。头=空;尾=空; }
  • 我明白了。它现在工作了 :) 非常感谢,但包含完整的代码测试它不显示我想要的 :( 一切都很好,但等级不是我想要的等级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2021-12-10
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多