[英]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.