搜索
您的当前位置:首页正文

合并两个有序链表(两种解法)

来源:好走旅游网

题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

方法1:暴力解法

public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { 
      val = x; 
      }
 }
 class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode node=new ListNode(-1);//定义一个虚拟节点
        ListNode tmp=node;//tmp标记此虚拟节点
        
        while(l1!=null&&l2!=null){
            if(l1.val<l2.val){
                tmp.next=l1;
                l1=l1.next;
                tmp=tmp.next;
            }else{
                tmp.next=l2;
                l2=l2.next;
                tmp=tmp.next;
            }
        }
        
        if(l1!=null){
            tmp.next=l1;
        }
        if (l2!=null){
            tmp.next=l2;
        }
        return node.next;//返回除虚拟节点的链表
    }
}

方法2:递归法

将问题化解为子问题

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null){
            return l2;
        }
        if(l2==null){
            return l1;
        }
        if(l1.val<l2.val){
            l1.next=mergeTwoLists(l1.next,l2);
            return l1;
        }else{
            l2.next=mergeTwoLists(l1,l2.next);
            return l2;
        }
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top