在单链表中,指定
public class ListNode {
int val;
ListNode next;
ListNode(int x) {val = x;}
}
在代码中,它说
ListNode result = new ListNode(0);
s = 7;
result.next = new ListNode(s);
result = result.next;
System.out.println(result.next);
我不知道为什么我没有得到我想要的东西。首先,当我返回result.next
时,我认为指针应该移到LinkedList的开头并给我7
但实际上它什么都没打印。第二,result = result.next
的含义是什么?这是否意味着指针移动到下一个节点?第三,我只想将7
放在ListNode中,但是如果我不放句ListNode result = new ListNode(0);
,程序将在编译时失败。
答案 0 :(得分:2)
你想要做的事情并不那么明显。
也许这些评论会有所帮助:
// create a new ListNode object with content 0, and put a reference to it
// in 'result'. At this stage it's 'next' field is null.
ListNode result = new ListNode(0);
s = 7;
// create a new ListNode object with content 7 and a null 'next' field,
// and make the first ListNode object's 'next' field refer to it.
result.next = new ListNode(s);
// now lose the reference to the first object, and instead make 'result'
// point to the second object. At this stage its 'next' field is still null.
result = result.next;
// now print the contents of the 'next' field of the second object, which
// will be null.
System.out.println(result.next);
重新提出你的第一个问题,或许你打算在最后打印result.val
,这确实是7.打印一个对象引用不会在没有进一步的情况下给你那个对象的val
字段工作(例如覆盖toString()
)
根据上面的评论,回答你的第二个问题,是的,你实际上是在链表上移了一步,所以'结果'现在指向您分配的第二个ListNode
(内容7
)。
我不明白你的第三个问题。您已分配了两个ListNode
。如果您只想要一个,那么请执行:
result = new ListNode(7);
答案 1 :(得分:2)
您收到此错误的原因是当您调用System.out.println(result.next)时result.next为null。让我们逐行遍历代码:
ListNode result = new ListNode(0);
//--this creates a node result : [0] -> null
// ^result pointing to this node
s = 7;
result.next = new ListNode(s);
//--this sets result.next to a new node with value 7 : [0] -> [7] -> null
// ^result ^result.next
result = result.next;
//--this moves result over to '7' node : [0] -> [7] -> null
// ^result ^result.next
System.out.println(result.next);
//--from this: [0] -> [7] -> null
// ^result ^result.next
//we can see that at this point in time, result.next = null
要回答有关“node = node.next是什么意思”的问题,这意味着引用将“滑动”到下一个节点的任何节点。从LinkedList可视化:
[0] - > [7] - >空
- ^ node ^ node.next
致电后:
node = node.next;
[0] - > [7] - >空
-------- ^ node ^ node.next
(编辑:回答评论中的问题:)
迭代LinkedList通常按如下方式进行:
ListNode result = new ListNode(0);
result.next = new ListNode(7);
while(result != null){
System.out.println(result.val);
result = result.next;'
}