簡體   English   中英

刪除單個鏈接列表的最后一個節點

[英]Deleting the last node of a singly linkedlist

下面是刪除單鏈表的最后一個節點的功能。 我不明白,為什么我們要創建一個臨時節點? 我嘗試在沒有臨時節點的情況下執行此操作並使用節點本身,但輸出不會刪除最后一個節點。 此外,由於我們使用臨時節點,為什么我們返回節點而不是臨時節點? 我們沒有對節點進行任何更改,那么節點如何受到影響?

public Node deleteLastNode(Node node)
{
    if (node.next == null || node == null)
        return null;
    Node temp = node;

    while (temp.next.next != null)
    {
        temp = temp.next;
    }
    temp.next = null;
    return node;
}

通常使用temp節點的原因是node是列表的頭部/起始點,這是我們所擁有的列表的唯一表示(通過鏈接列表的定義)。 因此,我們不想改變頭部(或列表的表示),這就是從方法返回node的原因 - 這意味着我們在執行刪除后返回更新的列表。

首先,你需要將其切換到這樣的條件

if (node.next == null || node == null) to 
if (node == null || node.next == null) 

這可能會導致空指針異常。 next ..我認為temp需要在賦值之前保存數據,以便真正的引用不會丟失數據。

我不明白為什么我們要創建一個臨時節點?

那是因為你將當前的迭代節點存儲在那個temp變量中。

我嘗試在沒有臨時節點的情況下執行此操作並使用節點本身,但輸出不會刪除最后一個節點。

代碼需要提供任何反饋。

另外,既然我們正在使用臨時節點,為什么我們要返回節點而不是臨時節點?

因為您正在返回對列表頭部的引用,所以它不再具有最后一個元素。

我們沒有對節點進行任何更改,因此節點如何受到影響?

你在這里刪除最后一個節點temp.next = null;

希望它能讓你有點清楚。

要將鏈表導航到其最后一個節點,您需要一個指針(光標)指向您認為最后一個待測試的this.next == null

沒有臨時節點(也就是游標或指針),您如何與列表中的任何節點進行交互?

暫無
暫無

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

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