LeetCode-21

21. 合併兩個有序鏈表

  • 創建鏈表頭

  • 雙鏈表,雙指針判斷

  • 定位,找到需要插入的位置,注意組合鏈表的形成

  • l1鏈表節點數大於l2鏈表節點數,將l1插入l2中

  •  鏈表尾部處理
  題目 :將兩個有序鏈表合併爲一個新的有序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。 

示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1==null)
            return l2;
        if(l2==null)
            return l1;
//排除空鏈表情況
        ListNode res=new ListNode(-1);
        ListNode p=res;
        while(l1!=null && l2!=null){
            if(l1.val<=l2.val){
                ListNode tp=new ListNode(l1.val);
                p.next=tp;
                p=p.next;        
                l1=l1.next;
            }
            else
            {
                ListNode tp=new ListNode(l2.val);
                p.next=tp;
                p=p.next;  
                l2=l2.next; 
            }
        }
//從小到大排序 若某一個鏈表走到盡頭跳出循環 直接將另一個鏈表接入即可
        if(l1==null)
            p.next=l2;
        else
            p.next=l1;
        return res.next;
    }
}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章