为什么head.next打印整个链表?

时间:2019-06-03 19:09:47

标签: java linked-list

我正在用Leetcode解决问题。问题是要合并两个链表并返回最终列表。指向问题的链接是https://leetcode.com/problems/merge-two-sorted-lists/。我以为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;
    }
}

因此我的测试输入为l1 = [1,2,4],l2 = [1,3,4]。我原本只希望得到1,因为使用sys.out(head.next)我只能得到1,而不是整个链表。

1 个答案:

答案 0 :(得分:0)

我在评论中也提供了类似的回复,但希望有些花哨的格式可以使它更清晰一些。

想象一下输入列表[1,2,3]。当您从中创建链接列表时,head对象如下所示(表示为JSON):

{
    "val" : 1,
    "next" : {
        "val" : 2,
        "next" : {
            "val" : 3,
            "next": null
        }
    }
}

所以head.next的值是:

{
    "val" : 2,
    "next" : {
        "val" : 3,
        "next": null
    }
}

请注意,在链接列表的每个级别上,您拥有的对象将保留列表的其余部分。您不能只获得一个节点,因为每个节点都将所有其余节点保存在其内部。

相关问题