zoukankan      html  css  js  c++  java
  • 链表合并之一

      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 }
  • 相关阅读:
    项目中遇到的IE8浏览器访问页面过慢问题
    linux下安装Oracle时交换空间不足的解决方法
    linux下为目录和文件设置权限
    启动TDS LDAP 服务器遇到的问题总结
    sql1032n sql6048n db2start启动不了 db2修改hostname
    IBM CE 错误集之(FNRCS0005E)
    Oracle同一个用户下启动多个数据库实例
    几种任务调度的 Java 实现方法与比较
    EXP-00056: ORACLE error 12154 encountered
    oracle删除数据库中的所有表
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7450069.html
Copyright © 2011-2022 走看看