如何在从单向链表中删除时获取根节点



我想知道这个函数在尝试从单向链表中删除节点时如何获取根节点。我理解整个删除部分。

class LinkedList { 
    LinkedListNode root; 
    // Remove the nodes which contain data equal to obj 
    void deleteNode(Object obj) { 
        // special case for root 
        if( root.data.equals(obj) ) { 
            root = root.next; 
        }  
        LinkedListNode current = root; 
        // iterate through list looking for obj 
        while( current.next != null ) { 
            // match found 
            if( current.next.data.equals(obj) ) { 
                // cut out the node 
                current.next = current.next.next; 
            } 
            current = current.next; 
        }
    }
} 
private class LinkedListNode { 
    Object data; 
    LinkedListNode next; 
} 

我不确定为什么仅仅通过创建一个LinkedListNode根,它指的是根节点。清晰易懂的帮助将不胜感激。

从理论上讲,我没有创建 LinkedListNode 根目录,我可以只向 delete 函数传递一个额外的参数,并根据其数据指定哪个是头部吗?

LinkedListNode deleteNode(LinkedListNode head, int d) {
    LinkedListNode n = head;
    if (n.data == d) {
        return head.next; /* moved head */
    }
    while (n.next != null) {
        if (n.next.data == d) {
            n.next = n.next.next;
            return head; /* head didn’t change */
        }
        n = n.next;
    }
}

我不确定我是否理解这个问题...

LinkedListNode root是类LinkedList的私有成员,大概是在构造函数和/或AddNode函数或其他函数的其他地方初始化的。初始化成员root(并引用列表的根节点)后,允许像DeleteNode这样的函数使用它,例如 if( root.data.equals(obj) ) { root = root.next; }

我希望这有所帮助...

它不是自动的。"root"是 LinkedList 类的类变量,也就是说,LinkedList 类的每个实例都有一个名为 root 的属性,它是某个 LinkedListNode。您可以在类定义中的任何位置使用和/或引用它。

当在其构造函数中创建 LinkedList 类的实例时,将指定根节点(我假设它存在于某处)。如果不是,则不会有任何对您创建的 LinkedList 的引用,它将几乎毫无用处。

为了回答问题的第二部分,你可以写这样一个函数,但没有必要。这将是多余的;您可以只使用对根节点的引用。

相关内容

  • 没有找到相关文章

最新更新