亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java鏈接列表無法將項目添加到末尾

Java鏈接列表無法將項目添加到末尾

qq_遁去的一_1 2023-08-04 15:24:03
似乎無法正確添加最后一個元素。我將最后一個項目保存在臨時節點中,然后創建一個新節點。然后我鏈接每個節點的前一個和下一個,然后將最后一個節點指向一個新的空節點。但是當我轉到 print() 方法時,該空節點似乎不是列表的一部分??雌饋硭鼞撓裎业耐扑头椒ㄒ粯雍唵?,但我似乎無法讓它像它一樣工作。public class LinkedListDeque {public DoubleNode first = new DoubleNode(null);public DoubleNode last = new DoubleNode(null);public DoubleNode temp;public int N;LinkedListDeque() {    first.next = last;    last.prev = first;}public static void main(String[] args) {    LinkedListDeque link = new LinkedListDeque();    link.push("banana");    link.printList();    link.enqueue("gorilla");    link.printList();    link.enqueue("spam");}//nested classprivate class DoubleNode {    String item;    int counter = 0;    DoubleNode next;    DoubleNode prev;    DoubleNode(String i) {        this.item = i;    }}public void push(String item) {    System.out.println("\npush()\n******");    if (first.item == null) {        first.item = item;        first.counter++;    } else {        System.out.println("last.item = " + last.item);        DoubleNode node = new DoubleNode(item);        first.prev = node;        node.next = first;        first = node;    }} public void enqueue(String item) {    System.out.println("\nenqueue()\n***********");    System.out.println("adding \"" + item + "\" to the end");    if (last.item == null) {        DoubleNode node = new DoubleNode(null);                     //holds null node to end list        last.item = item;        last.next = node;    } else {        DoubleNode node = new DoubleNode(null);        System.out.println("node = " + node.item);                  //= correct item        temp = last;        last = new DoubleNode(item);                                //creating a new last node        System.out.println("temp = " + temp.item);                  //corect        //reconnect the links        temp.next.item = last.item;}
查看完整描述

2 回答

?
牧羊人nacy

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;


查看完整回答
反對 回復 2023-08-04
?
qq_笑_17

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


查看完整回答
反對 回復 2023-08-04
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號