算法學習----合併兩個有序的鏈表

將兩個非遞減鏈表合成一個,並使得合成後的鏈表已然是有序(非遞減)鏈表:

/*
public class ListNode {
    int val;
    ListNode next = null;
     ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null&&list2==null)return null;
        if(list1==null&&list2!=null)return list2;
        if(list1!=null&&list2==null)return list1;
        ListNode newlist = new ListNode(-1);//建立新的節點,只作爲頭結點使用
        ListNode temp = newlist;//創建新的臨時節點
        while(list1!=null&&list2!=null){//判斷循環條件兩個鏈表節點是否爲空
            if(list1.val<=list2.val){//list1的值大於等於list2,將list1當前節點連接到newlist上
                temp.next=list1;
                temp = temp.next;//臨時節點後移到新加入到節點
                list1 = list1.next;//list1位置後移一個位置
            }
            else{//註釋內容同上
                temp.next = list2;
                temp = temp.next;
                list2 = list2.next;
            }
        }
        if(list2!=null) temp.next=list2;//循環結束如果list2有空餘節點,把list2連接到newlist的最後一個節點上,即temp節點
        if(list1!=null) temp.next=list1;//同上
        newlist = newlist.next;//由於初始化時新建了一個節點,故刪除此節點
        return newlist;//返回新的節點newlist
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章