簡體   English   中英

用Java遍歷鏈表編寫dequeue()函數

[英]Writing dequeue() function by traversing linked list in Java

隊列是使用單向鏈表實現的。

變量 back “指向”鏈表中的第一個節點。 在后面添加(入隊)新元素。

變量front“指向”鏈表中的最后一個節點。 元素從前面移除(出列)。

這種實現與通常的隊列相反,其中后面是最后一個節點,前面是第一個節點。 我知道這不是實現隊列的好方法,但使用鏈表編碼是一種很好的做法。

我已經編寫了 enqueue() 函數,但是我不確定我在 dequeue() 上做錯了什么。 我必須到最前面,也就是最后一個節點,才能讓它出列。 所以我必須遍歷 Node 來移除並返回隊列前面的項目。

 //Node stuff
private Node front, back;
static class Node {
    public Node (char item, Node next) { this.item = item; this.next = next; }
    public char item;
    public Node next;
    }

出隊功能:需要工作

public char dequeue() {

    char item;

    if (back.item == front.item) {
    item = front.item; 
    back = null;
    }
    for (Node tmp = back; tmp != null; tmp= tmp.next){
    if (tmp.next == null){ 
        item = tmp.item; 
        back.next = null; 
    }
    }
    return item; 
}

我創建了一個字符來存儲我要刪除的項目的值...我的問題是從列表中刪除最后一個節點。 我不知道如何在沒有空指針異常的情況下做到這一點。 任何輸入將不勝感激!

if條件在您到達最后一個節點時觸發,在這種情況下,您希望保存該節點的值並將其從列表中刪除。 您正在保存該值,但是為什么要將 back.net 設置為 null? 您不想將前一個 tmp 節點的 next 設置為 null 嗎? 不會將 back.next 設置為 null 切斷整個列表嗎?

很抱歉,第一條評論,家伙顯然沒有閱讀您的問題。 StackOverflow,對嗎?

暫無
暫無

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

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