[LeetCode] Merge Two Sorted Lists 合并两个排好序的链表


链接https://leetcode.com/problems/merge-two-sorted-lists/#/description
难度:Easy
题目:21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
翻译:合并两个排好序的链列,并将其作为新链表返回。新链表应通过将前两个列表的节点拼接在一起。
思路一:新建一个头指针指向0的临时链表,比较l1和l2的当前值的大小,把临时链表的next节点指向较小的节点,l1或者l2的指针后移一位,依次往下,直到l1或者l2为空,则把临时链表的next节点指向最后那段非空的链表,返回临时链表的第二个节点(头一个节点为0)。
参考代码一(Java)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode newList = new ListNode(0);
        ListNode nextList = newList;
        
        while(l1 != null && l2 != null){
            if(l1.val < l2.val){
                nextList.next = l1;
                l1 = l1.next;
            }else{
                nextList.next = l2;
                l2 = l2.next;
            }
            nextList = nextList.next;
        }
        
        if(l1 != null){
            nextList.next = l1;
        }else{
            nextList.next = l2;
        }
        
        return newList.next;
            
    }
}

思路二:使用递归法。构造一个临时链表,当l1当前节点的值大于l2当前节点的值时,我们把l2这个较小的值赋给临时链表的下一个节点,并将l2的下一个节点的值和l1当前节点的值放到下一次做对比,依次递归下去。
参考代码二(Java)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;
        if (l1.val > l2.val) {
            ListNode tmp = l2;
            tmp.next = mergeTwoLists(l1, l2.next);
            return tmp;
        } else {
            ListNode tmp = l1;
            tmp.next = mergeTwoLists(l1.next, l2);
            return tmp;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 1,551评论 0 6
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 2. Add Two Numbers 先初始化两个结点,一个用来做head,一个作为指引node不断向下延续的指针...
    Morphiaaa阅读 930评论 0 0
  • 标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Merge Two Sort...
    CarlBlack阅读 301评论 0 0
  • 2017年6月27日 星期二 天气雨 由于不知道肩膀彻底好了没有,今天本来打算不去健身房的,但是又觉得这么早下班没...
    whatcanhumando阅读 170评论 0 0