【问题标题】:How to get root node while deleting from singly linked list从单链表中删除时如何获取根节点
【发布时间】:2011-05-08 22:01:12
【问题描述】:

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

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 根,它指的是根节点。清晰易懂的帮助将不胜感激。

Ff理论上我没有创建LinkedListNode根,我可以给delete函数传入一个额外的参数,然后根据它的数据指定哪个是head吗?

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;
    }
}

【问题讨论】:

    标签: c# linked-list root


    【解决方案1】:

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

    LinkedListNode rootLinkedList 类的私有成员,可能在构造函数和/或AddNode 函数或其他地方的其他地方初始化。一旦你初始化了成员root(并引用了列表的根节点),像DeleteNode这样的函数就可以使用它,比如 if( root.data.equals(obj) ) { root = root.next; }

    我希望这会有所帮助...

    【讨论】:

    • 你能向我解释一下你将如何初始化根节点吗?谢谢=)
    • 您可能希望使用构造函数来执行此操作,这是为类初始化成员变量的标准方法。看看这个 MSDN 页面,它提供了所有详细信息:msdn.microsoft.com/en-us/library/ms173115.aspx 在您的情况下,您需要使用 root = new LinkedListNode 之类的东西初始化 root 并提供初始 datanext
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多