首页 > 解决方案 > 链表基础

问题描述

我正在尝试了解链接列表的基础知识。我的 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

为什么它显示为空?dummy.next是指着头,我只改变slowprev

编辑:

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

// 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

标签: javapointersmemorydata-structureslinked-list

解决方案


您声明dummy指向与 相同的对象head。再后来,你做 head.next = null;Sincedummyhead引用同一个对象,dummy.next也是null。

编辑:

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

我会将您的代码与行号一起粘贴,以便于参考。

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在 null 旁边设置

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

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

第 8 行:与 相同dummy.next = temp。由于 temp 为 null,因此您将dummy' 设置为 null 旁边


推荐阅读