1 package LinkTogether;
2
3 /*
4 * 两个升序链表合并,降序输出,使用栈
5 * */
6
7 import java.util.Stack;
8
9 class ListNode {
10 int val;
11 ListNode next = null;
12
13 ListNode(int val) {
14 this.val = val;
15 }
16 }
17
18 public class Demo03 {
19
20 public static void main(String[] args) {
21 ListNode n1 = new ListNode(10); //第一个链表
22 ListNode n2 = new ListNode(20);
23 ListNode n3 = new ListNode(30);
24 ListNode n4 = new ListNode(40);
25 n1.next = n2;
26 n2.next = n3;
27 n3.next = n4;
28
29 ListNode n5 = new ListNode(50); //第二个链表
30 ListNode n6 = new ListNode(60);
31 ListNode n7 = new ListNode(70);
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 Stack<Integer> stk = new Stack<Integer>(); //声明栈
46 if(list1.val <= list2.val){ //链表头部入栈
47 stk.push(list1.val);
48 stk.push(list2.val);
49 }
50 if(list1.val > list2.val){
51 stk.push(list2.val);
52 stk.push(list1.val);
53 }
54 ListNode temp1 = list1;
55 ListNode temp2 = list2;
56 while(temp1.next != null || temp2.next != null){
57 if(temp1.next != null && temp2.next != null){
58 if(temp1.next.val <= temp2.next.val){
59 stk.push(temp1.next.val);
60 stk.push(temp2.next.val);
61 }
62 if(temp1.next.val >temp2.next.val){
63 stk.push(temp2.next.val);
64 stk.push(temp1.next.val);
65 }
66 }
67 if(temp1.next != null && temp2.next == null){
68 stk.push(temp1.next.val);
69 }
70 if(temp1.next == null && temp2.next != null){
71 stk.push(temp2.next.val);
72 }
73 temp1 = temp1.next;
74 temp2 = temp2.next;
75 }
76
77 int flag = 0; //将链表二连在链表一的尾部
78 ListNode temp = list1;
79 while(flag<2){
80 if(temp.next == null){
81 flag ++;
82 if(flag == 2)break;
83 temp.next = list2;
84 }
85 temp = temp.next;
86 }
87
88 list1.val = stk.pop(); //取出栈中数据,依次放入链接后的链表中
89 temp = list1.next;
90 while(!stk.isEmpty()){
91 temp.val = stk.pop();
92 temp = temp.next;
93 }
94 return list1;
95
96
97 }
98
99 private static void print(ListNode n) { //输出函数
100 System.out.println(n.val);
101 if(n.next != null){
102 print(n.next);
103 }
104 }
105
106 }