Java 链表基础知识

Java 链表基础知识,java,pointers,memory,data-structures,linked-list,Java,Pointers,Memory,Data Structures,Linked List,我试图了解链表的基本知识。我的LinkedList类的定义如下: public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } 现在我面临一个问题。我的代码如下: ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = dummy; ListNode slow = head; head.next = null;

我试图了解链表的基本知识。我的LinkedList类的定义如下:

 public class ListNode {
 int val;
 ListNode next;
 ListNode(int x) { val = x; }
现在我面临一个问题。我的代码如下:

ListNode dummy = new ListNode(0);
dummy.next =  head;
ListNode prev = dummy;
ListNode slow = head;
head.next = null;
prev.next = slow;

ListNode temp = slow.next;
prev.next = temp;

System.out.println(dummy.next); //comes out null
为什么它是空的<代码>虚拟。下一个指向头部,我只改变了
上一个

编辑:

我们可以互换使用
slow
head
吗?如果是,那么为什么会发生这种情况

// head points to a Linked list starting from 1 in 1 -> 2 -> 3
ListNode curr = head;

while(curr.next!= null){
    curr= curr.next;
}

System.out.println(curr);
System.out.println(head); //these are different and head does not change

您可以声明
dummy
以指向与
head
相同的对象。然后,稍后执行
head.next=nulldummy
head
引用同一对象,
dummy。next
也为空

编辑:

进一步查看您的代码后,我发现了问题

我会用行号粘贴你的代码,以便于参考

ListNode dummy = new ListNode(0); // Line 1
dummy.next =  head; // Line 2
ListNode prev = dummy; // Line 3
ListNode slow = head; // Line 4
head.next = null; // Line 5
prev.next = slow; // Line 6

ListNode temp = slow.next; // Line 7
prev.next = temp; // Line 8

System.out.println(dummy.next); // Line 9
第3-4行:现在
prev
指向与
dummy
相同的对象,对于
slow
head
也指向相同的对象。我们基本上可以互换使用这些“名称”

第5行:设置null旁边的头

第6行:与运行相同:
dummy.next=head

第7行:
temp
现在指向
head
的下一个(因为
slow
head
是相同的)。记住,
head
的next为null(第5行)。基本上,这意味着
temp
为空

第8行:与
dummy.next相同

=温度
。由于temp为null,这是您在null旁边设置
dummy
为什么不试试,看看会发生什么?交叉发布:。请每个社区都应该有一个诚实的回答机会,而不会浪费任何人的时间。嗨!谢谢你的回答。实际上我有dummy.next=head,而不是dummy=head。您首先在哪里初始化
dummy
变量?嗨,贝贝!我编辑了这个问题来回答你的担忧。谢谢回复!没问题!谢谢你澄清这个问题。我真的被这一切弄糊涂了。