[英]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
; 您沒有更改列表。
假設這是一個單向鏈表,你將需要設置第二個到最后ListNode
的next
,以null
(或一組front
向null
,如果它是唯一的項目)。
您需要解決三種情況:
front
將具有一個值,但是front.next
將為null
。 在這種情況下,您應該將front
設置為null
。 next
一個條目設置為null
。 您尚未設法做到這一點。 記住具有空指針的指針之前的“當前”指針,並將該節點的“下一個”指針設置為空。 這樣,您將刪除對最新節點的引用,而不僅僅是更新局部變量。
試試這個
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.