猿问

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

我试图使用 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


注意:这两种方法都适用于其他节点,区别仅适用于第一个节点。


智慧大石
浏览 166回答 1
1回答

HUWWW

在第一个中,您将列表作为输入传递,在第二个中,您将引用您的头节点,如果您在第一个示例中注意到,如果数据存在于第一个节点,您正在修改列表的头。这是执行此操作的代码片段。 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 对象中,那么您必须修改其中的值。
随时随地看视频慕课网APP

相关分类

Java
我要回答