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); } }