1 package LinkTogether; 2 3 import java.util.ArrayList; 4 import java.util.LinkedList; 5 6 /* 7 * 两个升序链表合并,不减顺序输出,使用队列 8 * */ 9 10 class ListNode { 11 int val; 12 ListNode next = null; 13 14 ListNode(int val) { 15 this.val = val; 16 } 17 } 18 19 public class Demo05 { 20 public static void main(String[] args) { 21 ListNode n1 = new ListNode(2); 22 ListNode n2 = new ListNode(5); 23 ListNode n3 = new ListNode(7); 24 ListNode n4 = new ListNode(8); 25 n1.next = n2; 26 n2.next = n3; 27 n3.next = n4; 28 29 ListNode n5 = new ListNode(1); 30 ListNode n6 = new ListNode(6); 31 ListNode n7 = new ListNode(10); 32 ListNode n8 = new ListNode(80); 33 n5.next = n6; 34 n6.next = n7; 35 n7.next = n8; 36 37 n1 = Merge(n1,n5); 38 39 print(n1); 40 } 41 public static ListNode Merge(ListNode list1,ListNode list2) { 42 if(list1 == null && list2 == null)return null; 43 if(list1 == null)return list2; 44 if(list2 == null)return list1; 45 /* 46 * 将两个链表分别放在link1和link1中,便于使用相关方法 47 * */ 48 LinkedList<Integer> link1 = new LinkedList<Integer>(); 49 ListNode temp1 = list1; 50 while(temp1 != null){ 51 link1.add(temp1.val); 52 temp1 = temp1.next; 53 } 54 LinkedList<Integer> link2 = new LinkedList<Integer>(); 55 ListNode temp2 = list2; 56 while(temp2 != null){ 57 link2.add(temp2.val); 58 temp2 =temp2.next; 59 } 60 /* 61 * 将link1和link2中的内容按照不递减的顺序放入arr中 62 * */ 63 ArrayList<Integer> arr = new ArrayList<>(); 64 while((! link1.isEmpty()) && (! link2.isEmpty())){ 65 if(link1.element() <= link2.element()){ 66 arr.add(link1.poll()); 67 } 68 if((link1.isEmpty()) || (link2.isEmpty()))break; 69 if(link1.element() > link2.element()){ 70 arr.add(link2.poll()); 71 } 72 } 73 while(! link1.isEmpty()){ 74 arr.add(link1.poll()); 75 } 76 while(! link2.isEmpty()){ 77 arr.add(link2.poll()); 78 } 79 /* 80 * 将题目中的两个链表相连接, 81 * */ 82 int flag = 0; 83 ListNode temp = list1; 84 while(true){ 85 if(temp.next == null){ 86 flag ++; 87 if(flag == 2)break; 88 temp.next = list2; 89 } 90 temp = temp.next; 91 } 92 /* 93 * 将arr中的数据取出,放入合并后的链表中 94 * */ 95 list1.val = arr.get(0); 96 temp = list1.next; 97 for(int i=1;i<arr.size();i++){ 98 temp.val = arr.get(i); 99 temp = temp.next; 100 } 101 return list1; 102 } 103 104 private static void print(ListNode n) { 105 System.out.println(n.val); 106 if(n.next != null){ 107 print(n.next); 108 } 109 } 110 }