我试图使用 Node head 删除链接列表的第一个节点,但是当我使用 list.head 时它不起作用?import java.util.*; // Java program to implement // a Singly Linked List public class LinkedList { Node head; // head of list // Linked list Node. // This inner class is made static // so that main() can access it static class Node { int data; Node next; // Constructor Node(int d) { data = d; next = null; } } static void delete(LinkedList list,int x){ Node curr=list.head,prev=list.head; if(curr.data==x&&curr!=null){ list.head=curr.next; return ; } while(curr.data!=x&&curr.next!=null){ prev=curr; curr=curr.next; } if(curr.data==x) prev.next=curr.next; return ; } // There is method 'insert' to insert a new node // Driver code public static void main(String[] args) { /* Start with the empty list. */ LinkedList list = new LinkedList(); list = insert(list, 1); list = insert(list, 2); list = insert(list, 3); list = insert(list, 4); delete(list,1); printList(list); //There is method to print list } } //Output : 2 3 4当我使用上面的代码时,我可以删除第一个节点,但是当我使用这段代码时,它不起作用import java.util.*;// Java program to implement // a Singly Linked List public class LinkedList { Node head; // head of list // Linked list Node. // This inner class is made static // so that main() can access it 我想知道这些是相同的东西是不同的,Node head 和 list(LinkedList).head注意:这两种方法都适用于其他节点,区别仅适用于第一个节点。
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
在第一个中,您将列表作为输入传递,在第二个中,您将引用您的头节点,如果您在第一个示例中注意到,如果数据存在于第一个节点,您正在修改列表的头。这是执行此操作的代码片段。
Node curr=list.head,prev=list.head;
if(curr.data==x&&curr!=null){
list.head=curr.next;
return ;
}
但是在您的第二个示例中,如果在第一个节点找到数据,那么您将分配curr.next给方法本地的 head 变量,因此列表的 head 值保持不变,当您再次尝试在 main 方法中打印列表时,它显示旧的 head。这是第二个示例的代码片段
Node curr=head,prev=head;
if(curr.data==x&&curr!=null){
head=curr.next;
return ;
}
因此,如果您将头指针存储在 LinkedList 对象中,那么您必须修改其中的值。
添加回答
举报
0/150
提交
取消