Java 为什么head.next要打印整个链接列表?
我正在用Leetcode解决这个问题。问题是合并两个链接列表并返回最终列表。这个问题的链接是。我认为head.next只是指向整个链表的一个节点,但返回head.next会给出链表的所有节点。你能解释一下为什么吗Java 为什么head.next要打印整个链接列表?,java,linked-list,Java,Linked List,我正在用Leetcode解决这个问题。问题是合并两个链接列表并返回最终列表。这个问题的链接是。我认为head.next只是指向整个链表的一个节点,但返回head.next会给出链表的所有节点。你能解释一下为什么吗 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode curr = head;
while (l1 != null && l2 != null) {
if (l1.val < l2.val) {
curr.next = l1;
l1 = l1.next;
} else {
curr.next =l2;
l2 = l2.next;
}
curr = curr.next;
}
if (l1 != null) {
curr.next = l1;
} else if ( l2 != null) {
curr.next = l2;
}
return head.next;
}
}
/**
*单链表的定义。
*公共类列表节点{
*int-val;
*listnodenext;
*ListNode(intx){val=x;}
* }
*/
类解决方案{
公共ListNode合并列表(ListNode l1、ListNode l2){
ListNode头=新ListNode(0);
ListNode curr=头部;
while(l1!=null&&l2!=null){
if(l1.val
所以我的测试输入是l1=[1,2,4],l2=[1,3,4]。我本来只希望得到1,因为使用sys.out(head.next)我只得到1,而不是整个链表。我在评论中给出了类似的回答,但希望一些奇特的格式能让这更清楚一些 想象一下输入列表
[1,2,3]
。当您从中创建一个链表时,head
对象如下所示(表示为JSON):
因此,head.next的值是:
{
"val" : 2,
"next" : {
"val" : 3,
"next": null
}
}
请注意,在链表的每个级别上,您拥有的对象都包含链表的整个剩余部分。您不能只获得一个节点,因为每个节点都在其自身内部容纳所有剩余节点。head.next
指向一个节点,而该节点又指向下一个节点,以此类推,直到列表结束。但你已经知道了。你能澄清一下你对什么样的行为感到惊讶吗?现在还不清楚你在问什么。如果你只想打印第一个值,你应该打印sys.out(head.val)
。head.next
是对下一个的引用node@shmosel谢谢你的回复。head.next不在任何循环内。所以我假设returnhead.next
只返回当前值head.next
。我知道它们是连接的,但我很惊讶为什么head.next
会给出整个LinkedList,而不仅仅是节点的head.next
指向。@但是我知道head.next
是对下一个节点的引用。但是为什么head.next
返回的是整个LinkedList,而不仅仅是它引用的节点。head.next
既是一个节点,也是间接返回列表的整个剩余部分。再次,请澄清您对哪些具体行为感到惊讶。是的。我现在明白了。谢谢你澄清。
{
"val" : 2,
"next" : {
"val" : 3,
"next": null
}
}