我想知道这个函数在尝试从单个链表中删除节点时如何获取根节点。我理解整个删除部分。
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;
}
}
答案 0 :(得分:0)
我不确定我理解这个问题......
LinkedListNode root
是类LinkedList
的私有成员,可能是在构造函数中和/或AddNode
函数中的其他位置初始化的。成员root
初始化后(并引用列表的根节点),允许DeleteNode
等函数使用它,例如
if( root.data.equals(obj) ) { root = root.next; }
我希望这有点帮助...
答案 1 :(得分:0)
这不是自动的。 “root”是LinkedList类的类变量,也就是说LinkedList类的每个实例都有一个名为root的属性,它是一些LinkedListNode。您可以在类定义中的任何位置使用和/或引用它。
在创建LinkedList类的实例时,将在其构造函数(我假设存在于某处)中指定根节点。如果不是,则不会对您创建的LinkedList有任何引用,它将完全没用。
要回答问题的第二部分,你可以编写这样的函数,但没有必要。这将是多余的;你可以使用对根节点的引用。