LeetCode_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.

    Hide Tags
      Linked List
    翻译:


    Code:



    package From21;
    
    /**
     * @author MohnSnow
     * @time 2015年6月5日 下午4:26:33
     * 
     */
    public class LeetCode21 {
    
    	/**
    	 * @param argsmengdx
    	 *            -fnst
    	 */
    	static class ListNode {
    		int			val;
    		ListNode	next;
    
    		ListNode(int x) {
    			val = x;
    		}
    
    		@Override
    		public String toString() {
    			if (this.next != null) {
    				return val + "---" + this.next.toString();
    			} else {
    				return val + "";
    			}
    		}
    	}
    
    	//372msA
    	public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
    		if (l1 == null && l2 == null) {
    			return null;
    		}
    		if (l1 == null) {
    			return l2;
    		}
    		if (l2 == null) {
    			return l1;
    		}
    		//下面一行解决上面九行
    		//if(l1==null || l2==null) return l1==null? l2 : l1;
    		ListNode head;
    		if (l1.val <= l2.val) {//寻找第一个点
    			head = l1;
    			l1 = l1.next;
    		} else {
    			head = l2;
    			l2 = l2.next;
    		}
    		ListNode temp = head;
    		while (l1 != null && l2 != null) {
    			if (l1.val <= l2.val) {
    				temp.next = l1;
    				l1 = l1.next;
    				temp = temp.next;
    			} else {
    				temp.next = l2;
    				l2 = l2.next;
    				temp = temp.next;
    			}
    		}
    		if (l2 != null) {
    			temp.next = l2;
    		}
    		if (l1 != null) {
    			temp.next = l1;
    		}
    		return head;
    	}
    
    	public static ListNode mergeTwoLists1(ListNode l1, ListNode l2) {
    		if (l1 == null || l2 == null)
    			return l1 == null ? l2 : l1;
    		ListNode dummy = new ListNode(0);//空间复杂度为O(1)
    		dummy.next = l1;
    		ListNode p1 = dummy;
    		ListNode p2 = l2;
    
    		while (p1.next != null && p2 != null) {
    			if (p2.val < p1.next.val) {
    				ListNode t = p2;
    				p2 = p2.next;
    				t.next = p1.next;
    				p1.next = t;
    			}
    			p1 = p1.next;
    		}
    		if (p1.next == null && p2 != null)
    			p1.next = p2;
    		return dummy.next;
    	}
    
    	public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
    		if (l1 == null || l2 == null)
    			return l1 == null ? l2 : l1;
    		ListNode dummy = new ListNode(0);//空间复杂度为O(1)
    		dummy.next = l1;
    		ListNode p1 = dummy;
    		ListNode p2 = l2;
    
    		while (p1.next != null && p2 != null) {
    			if (p2.val < p1.next.val) {
    				ListNode t = p2;
    				p2 = p2.next;
    				t.next = p1.next;
    				p1.next = t;
    			}
    			p1 = p1.next;
    		}
    		if (p1.next == null && p2 != null)
    			p1.next = p2;
    		return dummy.next;
    	}
    
    	public static void main(String[] args) {
    		ListNode a = new ListNode(1);
    		ListNode b = new ListNode(2);
    		ListNode c = new ListNode(3);
    		ListNode d = new ListNode(4);
    		ListNode e = new ListNode(22);
    		a.next = b;
    		b.next = c;
    		c.next = d;
    		d.next = e;
    		e.next = null;
    		ListNode f = new ListNode(0);
    		ListNode g = new ListNode(2);
    		ListNode h = new ListNode(2);
    		ListNode i = new ListNode(9);
    		ListNode j = new ListNode(10);
    		f.next = g;
    		g.next = h;
    		h.next = i;
    		i.next = j;
    		j.next = null;
    		System.out.println(mergeTwoLists(a, f));
    		System.out.println(mergeTwoLists1(a, f));
    		System.out.println(mergeTwoLists2(a, f));
    
    	}
    
    }
    


    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值