zoukankan      html  css  js  c++  java
  • 剑指Offer25:合并两个排序的链表(Java)

    剑指 Offer 25. 合并两个排序的链表

    递归版

    每一次递归都返回一个结点且值等于两个节点最小的那个,这个返回结点的后继是下一层递归的返回值。一直递归直到有一个为空,返回不为空的结点。

    public class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            if (l1 == null) {
                return l2;
            }
            if (l2 == null) {
                return l1;
            }
            ListNode tmp = new ListNode();
            if(l1.val <= l2.val){
                tmp.val = l1.val;
                tmp.next = mergeTwoLists(l1.next,l2);
            }else{
                tmp.val = l2.val;
                tmp.next = mergeTwoLists(l1,l2.next);
            }
            return tmp;
        }
    }
    

    非递归版

    构建一个结点充当合并后的链表的头结点(这样方便最后返回整个链表),用cur表示合并后链表的当前结点,遍历两个链表,两个链表小的那个结点作为cur的后继。更新链表和cur的位置。最后当有一条链表为空退出循环时,将另一个链表的结点作为cur的后继,结束。

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dummy = new ListNode();
            ListNode cur = dummy;
            while(l1 != null && l2 != null){
                if(l1.val <= l2.val){
                    cur.next = l1;//将值小的结点作为cur的后继
                    l1 = l1.next;//更新链表指针
                }else{
                    cur.next = l2;//将值小的结点作为cur的后继
                    l2 = l2.next;//更新链表指针
                }
                cur = cur.next;//更新cur的位置
            }
            if(l1 != null){
                cur.next = l1;
            }else{
                cur.next = l2;
            }
            return dummy.next;
        }
    }
    
  • 相关阅读:
    JS闭包
    css3 背景渐变
    css扩展技术:Less和Sass的区别
    HTML5 Canvas八大核心技术及其API用法
    HTML5新标签含义,用法及其与HTML4的区别
    当离散遇见连续
    素数测试
    概率采样问题
    二分查找及其变种
    C++与Java多态的区别
  • 原文地址:https://www.cnblogs.com/dongmm031/p/13771342.html
Copyright © 2011-2022 走看看