zoukankan      html  css  js  c++  java
  • [leetCode]剑指 Offer 25. 合并两个排序的链表

    在这里插入图片描述

    递归

    可以逐一比较两个链表的头节点,将交小的节点取出放到链表尾部。当链表1为空时返回链表2,当链表2为空时,返回链表1。
    在这里插入图片描述

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            if(l1 == null) return l2;
            else if(l2 == null) return l1;
    
            ListNode pMergeHead = null;
    
            if(l1.val >= l2.val){
                pMergeHead = l2;
                l2.next = mergeTwoLists(l1,l2.next);
            }else{
                pMergeHead = l1;
                l1.next = mergeTwoLists(l1.next,l2);
            }
            return pMergeHead;
        }
    }
    

    非递归写法,使用哑节点

    两种写法思路一样,第二种简洁

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dummyNode = new ListNode();
            ListNode p1 = l1;
            ListNode p2 = l2;
            ListNode p = dummyNode;
            while(p1 != null || p2 != null){
                if(p1 == null){
                    p.next = p2;
                    break;
                }else if(p2 == null){
                    p.next = p1;
                    break;
                }
                if(p1.val <= p2.val ){
                    p.next = p1;
                    p1 = p1.next;
                    p = p.next;
                }else {
                    p.next = p2;
                    p2 = p2.next;
                    p =p.next;
                }
            }
            return dummyNode.next;
        }
    }
    
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dummyNode = new ListNode();
            ListNode cur = dummyNode;
            while(l1 != null && l2 != null){
                if(l1.val <= l2.val ){
                    cur.next = l1;
                    l1 = l1.next;
                }else {
                    cur.next = l2;
                    l2 = l2.next;
                }
                cur = cur.next;
            }
            cur.next = l1 == null ? l2 : l1;
            return dummyNode.next;
        }
    }
    
  • 相关阅读:
    C++默认参数
    C语言中volatile关键字的作用
    CURL超时处理
    C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
    unix时间戳和localtime
    !!的用处
    linux中grep和egrep的用法
    非阻塞,send后马上close消息能成功发出去吗
    .hpp与.h的区别
    14课作业答疑
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13859965.html
Copyright © 2011-2022 走看看