zoukankan      html  css  js  c++  java
  • 融合链表

     1 package com.algorithm;
     2 
     3 public class MergeList {
     4       public ListNode Merge(ListNode list1,ListNode list2) {
     5           //运行时间:32ms
     6           //占用内存:688k
     7           //输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
     8           //第一次比较
     9           if(list1 == null) 
    10               return list2;
    11           if(list2 == null) 
    12               return list1;
    13           ListNode listGuard = null;//哨兵,存储链表头指针
    14           ListNode listroot = null;
    15           //然后每次比较两条链表的每一个结点的大小,如果小的,那么将哨兵的next指向它,再
    16           //将小的节点指向next
    17           if(list1.val <= list2.val) {
    18               listroot = list1;
    19               listGuard = list1;
    20               list1 = list1.next;
    21           }else{
    22               listroot = list2;
    23               listGuard = list2;
    24               list2 = list2.next;
    25           }
    26           while(list1 != null && list2 != null){
    27               if(list1.val <= list2.val){//如果第一条链表小于第二条链表
    28                   listGuard.next = list1;
    29                   listGuard = list1;
    30                   list1 = list1.next;
    31               }else{
    32                   listGuard.next = list2;
    33                   listGuard = list2;
    34                   list2 = list2.next;
    35               }
    36           }
    37           //循环遍历完了,如果第一个不等于空,则说明后面还有数据,直接移动指针listGuard即可
    38           if(list1 != null) {
    39               listGuard.next = list1;42           }
    43           if(list2 != null) {
    44               listGuard.next = list2;47           }
    48           return listroot;
    49         }
    50       public static void main(String[] args) {
    51              ListNode la = new ListNode(1);
    52               ListNode lb = new ListNode(3);
    53               ListNode lc = new ListNode(9);
    54               la.next = lb;
    55               lb.next = lc;
    56               lc.next = null;
    57               ListNode ma = new ListNode(4);
    58               ListNode mb = new ListNode(6);
    59               ListNode mc = new ListNode(7);
    60               ma.next = mb;
    61               mb.next = mc;
    62               mc.next = null;
    63               ListNode root = new MergeList().Merge(la,ma);
    64               while(root!=null){
    65                   System.out.print(root.val + " ");
    66                   root = root.next;
    67               }
    68         }
    69 }
    70 public class ListNode { 71 int val; 72 ListNode next = null; 73 74 ListNode(int val) { 75 this.val = val; 76 } 77 }
     1   //递归
     2         if(list1 == null)
     3         return list2;
     4        if(list2 == null)
     5         return list1;
     6        if(list1.val <= list2.val){
     7             list1.next = Merge(list1.next, list2);
     8             return list1;
     9         }else{
    10             list2.next = Merge(list1, list2.next);
    11             return list2;
    12         }
  • 相关阅读:
    解决mac中wxpython对64位的支持
    python翻译词典实例
    php断点续传
    ubuntu配置telnet服务
    *p++,*++p,*(p++),*(++p)
    在main函数前后执行的函数之 C语言
    串行通讯协议--起止式异步通讯协议(UART)
    TTL电平, RS232电平以及CMOS电平的区别
    C 语言的关键字static 和C++ 的关键字static 有什么区别
    C语言各种数据类型取值范围
  • 原文地址:https://www.cnblogs.com/fankongkong/p/6518869.html
Copyright © 2011-2022 走看看