【问题标题】:Merge 2 sorted linked lists合并 2 个已排序的链表
【发布时间】:2021-06-23 05:23:25
【问题描述】:

我是数据结构的新手,我正在尝试为链接列表编写一些问题。

问题是合并 2 个排序的链表。我已经为它编写了以下代码,但是当我从我的方法中返回下一个头部时,我只是得到了合并链表的最后一个值。我不知道我哪里出错了。

这里是sn-p的代码:

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode head = new ListNode();
            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;
                }
            }
            if(l1 != null){
                curr.next = l1;}  
            else if(l2 != null){
                curr.next = l2;}
        return head.next;
   }

【问题讨论】:

    标签: c++ data-structures linked-list


    【解决方案1】:

    在将值添加到当前节点的下一个节点之后,您并没有增加 curr,所以真正发生的是您继续向当前节点的下一个节点添加值。

    演示

    1->5->6 列表 1

    2->3 列表 2

    head = new ListNode(); // dummyNode;
    current = head; // i.e dummyNode
    

    循环中发生了什么:

    第一次迭代

    dummyNode -> 1

    (请注意,您在这里如何不将 dummyNode 增加到 1,因此在每次迭代中,下一个 dummyNodes 将被替换)

    第二次迭代

    dummyNode -> 2

    第三次迭代

    dummyNode -> 3

    (等等.....)

    在所有迭代之后,您将剩下

    dummyNode -> 6

    所以当你返回 head.next 时,你会得到 6

    代码改动:

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    
        ListNode head = new ListNode();
        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;
            curr = curr.next;
        }  
        else if(l2 != null){
            curr.next = l2;
            curr = curr.next;
        }
        return head.next;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 2011-05-17
      • 2011-01-21
      相关资源
      最近更新 更多