Java 为什么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; }

我正在用Leetcode解决这个问题。问题是合并两个链接列表并返回最终列表。这个问题的链接是。我认为head.next只是指向整个链表的一个节点,但返回head.next会给出链表的所有节点。你能解释一下为什么吗

/**
 * 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不在任何循环内。所以我假设return
head.next
只返回当前值
head.next
。我知道它们是连接的,但我很惊讶为什么
head.next
会给出整个LinkedList,而不仅仅是节点的
head.next
指向。@但是我知道
head.next
是对下一个节点的引用。但是为什么
head.next
返回的是整个LinkedList,而不仅仅是它引用的节点。
head.next
既是一个节点,也是间接返回列表的整个剩余部分。再次,请澄清您对哪些具体行为感到惊讶。是的。我现在明白了。谢谢你澄清。
{
    "val" : 2,
    "next" : {
        "val" : 3,
        "next": null
    }
}