zoukankan      html  css  js  c++  java
  • 合并两个排序的链表

    题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    思路:题目相对简单,有两个思路,一个是遍历两个链表的公共长度,按值的大小把各个节点连接起来,最后把较长链表的剩余部分追加到最后。第二个思路,这个类似于自然合并排序,可以使用递归分治的思想来解决问题,还让你容易就能把这个问题分解成子问题。

    实现代码

    非递归:

    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode Merge(ListNode list1,ListNode list2) {
            if(list1 == null)
                return list2;
            if(list2 == null)
                return list1;
            
            ListNode head;
            if(list1.val<=list2.val) {
                head = list1;
                list1 = list1.next;
            }
            else {
                head = list2;
                list2 = list2.next;
            }
            
            ListNode pNode = head;
            
            while(list1 != null && list2 != null) {
                if(list1.val <= list2.val) {
                    pNode.next = list1;
                    list1 = list1.next;
                }
                else {
                    pNode.next = list2;
                    list2 = list2.next;
                }
                pNode = pNode.next;
            }
            
            while(list1 != null) {
                pNode.next = list1;
                pNode = pNode.next;
                list1 = list1.next;
            }
            
            while(list2 != null) {
                pNode.next = list2;
                pNode = pNode.next;
                list2 = list2.next;
            }
            
            return head;
        }
    }

    递归:

    /*
    public class ListNode {
        int val;
        ListNode next = null;
     
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode Merge(ListNode list1,ListNode list2) {
            if(list1 == null)
                return list2;
            if(list2 == null)
                return list1;
             
            ListNode head;
             
            if(list1.val < list2.val) {
                head = list1;
                head.next = Merge(list1.next, list2);
            }
            else {
                head = list2;
                head.next = Merge(list1, list2.next);
            }
            return head;
        }
    }
  • 相关阅读:
    用任务计划管理计划任务对付任务计划-禁止WPS提示升级
    破解激活Win10无风险?激活后删除激活工具无影响===http://www.pconline.com.cn/win10/693/6932077_all.html#content_page_4
    VS2013 密钥 – 所有版本
    2017面试题1
    模拟锚点
    输入框被软键盘遮
    资源(GitHub)
    全国城市部分js
    subline3 插件
    app下载——js设备判断
  • 原文地址:https://www.cnblogs.com/wxisme/p/5295374.html
Copyright © 2011-2022 走看看