C# 从单链表中删除时如何获取根节点
我想知道这个函数在试图从单链表中删除节点时是如何获取根节点的。我理解整个删除部分C# 从单链表中删除时如何获取根节点,c#,linked-list,root,C#,Linked List,Root,我想知道这个函数在试图从单链表中删除节点时是如何获取根节点的。我理解整个删除部分 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) )
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函数传递一个额外的参数,并根据其数据指定哪个是头吗
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的引用,并且它几乎毫无用处
要回答问题的第二部分,您可以编写这样一个函数,但没有必要。这是多余的;您可以使用对根节点的引用。您能向我解释一下如何初始化根节点吗?Thank=)您可能希望使用构造函数来实现这一点,构造函数是初始化类的成员变量的标准方法。看看这个MSDN页面,它提供了所有细节:在您的情况下,您需要使用类似
root=newlinkedListNode
的东西初始化root,并提供初始数据和下一个值