从LinkedList中删除元素

时间:2013-03-05 23:22:22

标签: java

我正在尝试从linkedList中删除最后一个节点并将其返回。这是Linkedlist类的一部分。我写的以下方法不会删除最后一个节点。有人知道为什么吗?

public int delete(){

    if(front==null){

        throw new NoSuchElementException(); 

    }else{

       ListNode current = front;

       while(current.next!=null){
          current = current.next;   
       }

       int delete = current.data;
       current = null;
       return delete;
    } 
}

6 个答案:

答案 0 :(得分:3)

current设置为null只会将引用更改为null。它决不会影响链表数据结构。您需要找到倒数第二个节点并将其下一个指针设置为null:

int data = secondToLastNode.next.data;
secondToLastNode.next = null;
return data;

当然,您需要处理列表中只有一个节点的情况,上面的代码没有考虑到这一点。

答案 1 :(得分:2)

您只需将本地参考current设置为null;你没有改变你的清单。

假设这是一个单独的链接列表,您需要将倒数第二个ListNode的{​​{1}}设置为next(或将null设置为{ {1}}如果它是唯一的项目。)

答案 2 :(得分:2)

您需要涵盖三种情况:

  1. 您的列表中没有条目。通常你只是在这种情况下退出,但像你一样抛出异常应该没问题。
  2. 您的列表中只有一个条目。在这种情况下,您的变量front将具有值,但front.next将为null。在这种情况下,您应该将front设置为null
  3. 对于上述所有内容,您应将最后一个条目的next设置为null 。你还没有设法做到这一点。

答案 3 :(得分:0)

我最后解释了here

Jave是一种传递引用语言,=重新分配引用。您只需要更改本地参考,请参阅上面链接中的示例代码并了解它。

答案 4 :(得分:0)

在具有空指针的那个之前记住'current',并将该节点的'next'指针设置为null。这样,您删除对最新节点的引用,而不是仅更新本地变量。

答案 5 :(得分:0)

尝试这个

public int delete(){

    if(front==null){

        throw new NoSuchElementException(); 

    } else if(front.next===null){
           return front.data;
}else{

       ListNode current = front;

       while(current.next.next!=null){
          current = current.next;   
       }

       int deleted_node = current.next.data;
       current.next = null;
       return deleted_node;
    } 
}