为了账号安全,请及时绑定邮箱和手机立即绑定

list(LinkedList).head 和 Node head 的区别?

list(LinkedList).head 和 Node head 的区别?

智慧大石 2023-04-26 17:03:20
我试图使用 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 对象中,那么您必须修改其中的值。


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信