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;
        }
    }
    
  • 相关阅读:
    MYSQL 数据库管理
    maven初学总结
    解决问题的思路
    java泛型综述
    几种不常用的排序算法
    创新思维
    Django从入门到放弃
    KlayGE 4.0中Deferred Rendering的改进(二):拥挤的GBuffer
    用Android NDK r6编译boost 1.47
    glloader移植到了Android
  • 原文地址:https://www.cnblogs.com/dongmm031/p/13771342.html
Copyright © 2011-2022 走看看