簡體   English   中英

從LinkedList中刪除元素

[英]removing element from 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;
    } 
}

current設置為null只會將引用更改為null。 它決不會影響鏈表數據結構。 您需要找到倒數第二個節點,並將其下一個指針設置為null:

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

當然,您需要處理以下情況:列表中只有一個節點,上面的代碼沒有考慮。

您僅將本地參考current設置為null 您沒有更改列表。

假設這是一個單向鏈表,你將需要設置第二個到最后ListNodenext ,以null (或一組frontnull ,如果它是唯一的項目)。

您需要解決三種情況:

  1. 您的列表中沒有條目。 通常,在這種情況下,您只是退出,但是像您一樣拋出異常應該沒問題。
  2. 您的列表中只有一個條目。 在這種情況下,您的變量front將具有一個值,但是front.next將為null 在這種情況下,您應該將front設置為null
  3. 對於上述任何一項,您都應將最后一個條目中的next一個條目設置為null 您尚未設法做到這一點。

在這里最后解釋了這一點

Jave是一種通過引用的語言,並且=重新分配了引用。 您只需要更改本地引用,請參閱上面鏈接中的示例代碼並了解這一點。

記住具有空指針的指針之前的“當前”指針,並將該節點的“下一個”指針設置為空。 這樣,您將刪除對最新節點的引用,而不僅僅是更新局部變量。

試試這個

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;
    } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM