[leedcode 21] Merge Two Sorted Lists

/**
 * 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) {
        //此题是两个已排序链表合并,需要借助三个节点,两个节点是两个链表的头结点,另一个节点是合并链表的尾节点
        //时间复杂度O(m+n)
        //注意细节:当一个链表为空时,要直接连接另一个链表(省时间)
        //比较讨巧的细节是,首先要申请一个新节点,这样省去了要单独处理头结点的问题
        
        ListNode newHead=new ListNode(-1);
        ListNode p1=l1;
        ListNode p2=l2;
        ListNode last=newHead;
        while(p1!=null&&p2!=null){
            if(p1.val<=p2.val){
                last.next=p1;
                p1=p1.next;
            }else{
                last.next=p2;
                p2=p2.next;
            }
             last=last.next;
        }
        if(p1!=null){
            last.next=p1;
        }
        if(p2!=null){
            last.next=p2;
        }
        return newHead.next;
        
    }
}

 

posted @ 2015-07-07 18:25  ~每天进步一点点~  阅读(137)  评论(0编辑  收藏  举报