Мне было интересно, как эта функция получает корневой узел при попытке удалить узел из односвязного списка. Я понимаю всю часть удаления.
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, могу ли я просто передать дополнительный параметр в функцию удаления и указать, какой из них является заголовком на основе его данных?
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;
}
}