【劍指offer】鏈表——鏈表合成

package cn.dzp.flyroc.offer;

public class MergeDemo {

    /*題目描述:輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表
     * 固然咱們須要合成後的鏈表知足單調不減規則*/

    /*思路:遞歸與非遞歸求解,小數放在前面*/

    //代碼實現
    public static class ListNode{

        int data;
        ListNode nextNode = null;

        ListNode(int data){
            this.data = data;
        }
    }

    public static ListNode Merge(ListNode list1, ListNode list2){

        if (list1 == null){     //判斷list1是否爲空
            return list2;
        }

        if (list2 == null){     //判斷list2是否爲空
            return list1;
        }
        ListNode newHead = null;        //創建一個新的頭節點(用來存儲比較後小的節點值)
        
        if (list1.data <= list2.data){      //list1中的值小,將值放入頭節點,頭結點的下一個節點進行遞歸遍歷
            

            newHead = list1;
            newHead.nextNode = Merge(list1.nextNode, list2);

        }else {     //list2中的元素小

            newHead = list2;
            newHead.nextNode = Merge(list1, list2.nextNode);
        }
        System.out.println("這是遞歸後的鏈表:"+newHead.data);
        return newHead;
    }

    public static void main(String[] args){

        ListNode list1 = new ListNode(1);
        ListNode list3 = new ListNode(3);
        ListNode list5 = new ListNode(5);

        list1.nextNode = list3;
        list3.nextNode = list5;
        list5.nextNode = null;

        ListNode list2 = new ListNode(2);
        ListNode list4 = new ListNode(4);
        ListNode list6 = new ListNode(6);

        list2.nextNode = list4;
        list4.nextNode = list6;
        list6.nextNode = null;


        Merge(list1, list2);
    }
}
相關文章
相關標籤/搜索