2 回答

TA貢獻1862條經驗 獲得超7個贊
讓我們看看實際發生了什么:初始狀態:
第一個包含 null,first.next 是最后一個,最后一個包含 null
push:first不再包含null,仍然指向last,帶有null
enque:last.item為null,因此第一個cae被觸發,現在列表如下:banana -> gorilla -> null,last指向gorilla
再次排隊:現在 else 被觸發。如果您查看代碼,您會發現 temp.next 沒有任何地方被觸及。這意味著作為 enque 之前的最后一個節點并被復制到 temp 的節點仍然指向空節點。
這最終會導致空指針異常。
缺少什么:temp.next=last
創建最后一個節點后,類似于 , 。
實際發生的情況是這樣的:
---> last ---> closing-null
---> temp ---> closing-null
---> last
看來您可以更干凈地實現這一點,而無需空節點關閉列表。
然后你可以做這樣的事情:
node=new Node(item);
last.next=node;
node.prev=last;
last=node;

TA貢獻1818條經驗 獲得超7個贊
我不會給你完整的代碼,但我會把它可視化。之后您可以輕松地編寫代碼。
Next 是--->,Previous 是<---,last 指向最后一個節點,first 指向第一個節點
假設你有這個清單。
Banana ---> Orange ---> Gorilla ---> null
<--- <---
^ ^
| |
first last
// First's previous and last's next is null.
你想在最后添加芒果。您創建一個新節點
DoubleNode node = new DoubleNode("Mango");
<--- Mango --->
// Note: When you create a new node by default both next and previous are null.
// You don't need to point them to null later
步驟1:
last.next(newNode);
Banana ---> Orange ---> Gorilla ---> Mango
<--- <---
^ ^
| |
first last
第2步:
newNode.previous(last);
Banana ---> Orange ---> Gorilla ---> Mango
<--- <--- <---
^ ^
| |
first last
現在我們有新的最后一個,所以我們將更新最后一個
last = newNode
Banana ---> Orange ---> Gorilla ---> Mango
<--- <--- <---
^ ^
| |
first last
從構造函數中我們知道 Mango 的 next 已經為 null,因此newNode.next(null);沒有必要。
您可能會遇到 nullpointerException 的原因
添加第一個元素后,您的列表如下所示
null <--- Banana ---> null null
^ ^
| |
first last
從技術上講,你應該將第一個和最后一個點都指向香蕉,因為你沒有這樣做。當你將某些東西放入隊列時,比如說大猩猩。這將是
null.item = "Gorilla"
null.next = null
添加回答
舉報