合并两个排序列表,但我的头没有更新 - Java

时间:2017-04-12 19:31:47

标签: java merge

我正在研究"合并两个已排序的链接列表",但看起来我的头部尚未正确更新。

为了解决这个问题,我尝试了.val,但它在while循环中无法正常工作。

然后,有线的事情是,当我尝试.next时,它的工作原理。我完全糊涂了。 我把两个代码放在下面(工作的和错的),这样你就能看到我做了什么。

有人可以解释为什么第一个不起作用吗?

错误之一:

    /**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
/**
 * @param ListNode l1 is the head of the linked list
 * @param ListNode l2 is the head of the linked list
 * @return: ListNode head of linked list
 */
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    if (l1 == null)
        return l2;
    else if (l2 == null)
        return l1;

    ListNode result = new ListNode(5);
    ListNode head = result;

    while (l1 != null && l2 != null){
        if (l1.val < l2.val){
            result = l1;
            l1 = l1.next;
        }
        else{
            result = l2;
            l2 = l2.next;
        }
        result = result.next;
    }

    if (l1 == null){
        result = l2;
    }
    else{
        result = l1;
    }

    return head;

    }
}

工作一:

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    if (l1 == null)
        return l2;
    else if (l2 == null)
        return l1;

    ListNode result = new ListNode(5);
    ListNode head = result;

    while (l1 != null && l2 != null){
        if (l1.val < l2.val){
            result.next = l1;
            l1 = l1.next;
        }
        else{
            result.next = l2;
            l2 = l2.next;
        }
        result = result.next;
    }

    if (l1 == null){
        result.next = l2;
    }
    else{
        result.next = l1;
    }

    return head.next;

}

唯一的区别是我在第二个中加了.next。

谢谢!

1 个答案:

答案 0 :(得分:1)

代码使用虚拟节点,以便在合并之后,dummy_node.next将最终指向合并列表。这简化了代码,因此它不必有条件地处理最初为空的合并列表。 (在C或C ++中,可以使用指向节点的指针而不是虚节点,但java没有等效的。)代码通过将result和head都设置为虚拟节点的引用开始,然后进行结果列表合并。工作代码返回head.next,这是原始的dummy_node.next。非工作代码返回head,它是对虚拟节点的引用,而不是对合并列表的引用。