我正在用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,而不是整个链表。
答案 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
}
}
请注意,在链接列表的每个级别上,您拥有的对象将保留列表的其余部分。您不能只获得一个节点,因为每个节点都将所有其余节点保存在其内部。