用于删除任何索引的节点,我无法理解代码的最后一行“ temp.next = t;”

问题描述 投票:0回答:2

`静态类Node {E数据;节点下一个;

    public Node(E data) {
        this.data = data;
        next = null;
    }
}
        public void deleteAtIndex(int index){     
        Node temp = head;
        for (int i = 1; i < index-1 ; i++) {
            temp=temp.next;
        }
        Node t = temp.next.next;
        temp.next = t;
       }`  

什么需要用Java编写代码,因为提到了我们使用“ temp.next = t;”。到“从列表取消链接已删除的节点”。如果删除最后一行,则代码未提供所需的输出。

java reference singly-linked-list
2个回答
2
投票

让我给你一个示例-

考虑5-> 6-> 10-> 15。假设您要删除10。

逻辑上您想找到6并使其指向15。

第一步这样做将需要您获得指向您的对象的节点(我们要删除的节点)

 for (int i = 1; i < index-1 ; i++) {
            temp=temp.next;
 }

在此for循环中,我们仅找到指向要删除的对象的节点。


    Node next = temp.next.next;   //15
    temp.next = next; // Point 6 to 15

我们将“ 6”的下一个节点设置为要删除的对象的下一个节点。为什么?因为我们希望它是:5-> 6-> 15

您的下一个>]参数保存值为“ 15”的节点。

Temp

为“ 6”。

<< [Temp.next

更改之前指向10。更改之后它将指向15。

0
投票
使用temp.next = next,您正在更新对已删除旧节点的下一个节点的引用。您还可以在LinkedList实现中看到:#unlink(Node)
© www.soinside.com 2019 - 2024. All rights reserved.