我试图了解链表的基础知识。我的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
为什么它会显示为null? dummy.next
指向头,我只更改了slow
和prev
?
编辑:
我们可以交替使用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
答案 0 :(得分:1)
您声明dummy
指向与head
相同的对象。然后,您再进行head.next = null;
的操作,因为dummy
和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行:将head
的下一个设置为空
第6行:与运行相同:dummy.next = head
第7行:temp
现在指向head
的下一个(因为slow
和head
相同)。请记住,head
的下一个为空(第5行)。基本上,这意味着temp
为空。
第8行:与dummy.next
= temp
相同。由于temp为null,因此在此处将dummy
的位置设置为null