第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java鏈接列表無法將項(xiàng)目添加到末尾

Java鏈接列表無法將項(xiàng)目添加到末尾

qq_遁去的一_1 2023-08-04 15:24:03
似乎無法正確添加最后一個(gè)元素。我將最后一個(gè)項(xiàng)目保存在臨時(shí)節(jié)點(diǎn)中,然后創(chuàng)建一個(gè)新節(jié)點(diǎn)。然后我鏈接每個(gè)節(jié)點(diǎn)的前一個(gè)和下一個(gè),然后將最后一個(gè)節(jié)點(diǎn)指向一個(gè)新的空節(jié)點(diǎn)。但是當(dāng)我轉(zhuǎn)到 print() 方法時(shí),該空節(jié)點(diǎn)似乎不是列表的一部分??雌饋硭鼞?yīng)該像我的推送方法一樣簡單,但我似乎無法讓它像它一樣工作。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貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

讓我們看看實(shí)際發(fā)生了什么:初始狀態(tài):

  • 第一個(gè)包含 null,first.next 是最后一個(gè),最后一個(gè)包含 null

  • push:first不再包含null,仍然指向last,帶有null

  • enque:last.item為null,因此第一個(gè)cae被觸發(fā),現(xiàn)在列表如下:banana -> gorilla -> null,last指向gorilla

  • 再次排隊(duì):現(xiàn)在 else 被觸發(fā)。如果您查看代碼,您會(huì)發(fā)現(xiàn) temp.next 沒有任何地方被觸及。這意味著作為 enque 之前的最后一個(gè)節(jié)點(diǎn)并被復(fù)制到 temp 的節(jié)點(diǎn)仍然指向空節(jié)點(diǎn)。

  • 這最終會(huì)導(dǎo)致空指針異常。

缺少什么:temp.next=last創(chuàng)建最后一個(gè)節(jié)點(diǎn)后,類似于 , 。

實(shí)際發(fā)生的情況是這樣的:

---> last ---> closing-null


---> temp ---> closing-null


---> last

看來您可以更干凈地實(shí)現(xiàn)這一點(diǎn),而無需空節(jié)點(diǎn)關(guān)閉列表。


然后你可以做這樣的事情:


node=new Node(item);

last.next=node;

node.prev=last;

last=node;


查看完整回答
反對(duì) 回復(fù) 2023-08-04
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

我不會(huì)給你完整的代碼,但我會(huì)把它可視化。之后您可以輕松地編寫代碼。


Next 是--->,Previous 是<---,last 指向最后一個(gè)節(jié)點(diǎn),first 指向第一個(gè)節(jié)點(diǎn)


假設(shè)你有這個(gè)清單。


Banana ---> Orange ---> Gorilla ---> null

       <---        <---         

  ^                       ^

  |                       |

first                    last

// First's previous and last's next is null.

你想在最后添加芒果。您創(chuàng)建一個(gè)新節(jié)點(diǎn)


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

現(xiàn)在我們有新的最后一個(gè),所以我們將更新最后一個(gè)


last = newNode

Banana ---> Orange ---> Gorilla ---> Mango 

       <---        <---         <---

  ^                                    ^

  |                                    |

first                                last

從構(gòu)造函數(shù)中我們知道 Mango 的 next 已經(jīng)為 null,因此newNode.next(null);沒有必要。


您可能會(huì)遇到 nullpointerException 的原因


添加第一個(gè)元素后,您的列表如下所示


null <--- Banana ---> null      null

             ^                   ^

             |                   |

           first                last

從技術(shù)上講,你應(yīng)該將第一個(gè)和最后一個(gè)點(diǎn)都指向香蕉,因?yàn)槟銢]有這樣做。當(dāng)你將某些東西放入隊(duì)列時(shí),比如說大猩猩。這將是


null.item = "Gorilla"

null.next = null


查看完整回答
反對(duì) 回復(fù) 2023-08-04
  • 2 回答
  • 0 關(guān)注
  • 169 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)