码迷,mamicode.com
首页 > 其他好文 > 详细

链表合并

时间:2017-08-29 21:39:15      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:public   链接   string   print   ext   bsp   ring   第一个   ati   

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

 

链表合并

标签:public   链接   string   print   ext   bsp   ring   第一个   ati   

原文地址:http://www.cnblogs.com/XuGuobao/p/7450069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!