编程语言
首页 > 编程语言> > 【java】剑指offer25_合并两个排序的链表

【java】剑指offer25_合并两个排序的链表

作者:互联网

题目描述

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:

0 <= 链表长度 <= 1000

我的解题思路一:迭代,利用两个链表指针思想,遍历两个链表直至链表都为Null,当某一个链表为空时则将另外一个链表所剩节点全部加到新链表后,反正判断两个节点数值大小,追加小的节点到新链表后,追加后相应链表往后移动一位,其中难点是定义一个空链表头,用cur指向其新链表头即cur.next = l1或cur.next = l2,每次追加的时候移动cur指向,即cur=cur.next ,最后 返回的时候返回该新链表后next位链表,即mergeNode.next

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode  mergeNode = new ListNode(0), cur = mergeNode;
        while (l1 != null || l2 != null){
            if(l1 == null){
                cur.next = l2;
                return mergeNode.next;
            }else if(l2 == null){
                cur.next = l1;
                return mergeNode.next;
            }
            if(l1.val<=l2.val){
                cur.next= l1;
                l1 = l1.next;
            }else {
                cur.next = l2;
                l2 = l2.next;
            }
            cur = cur.next;
        }
        return mergeNode.next;
    }

解题思路二:递归,判断边界值链表为空的情况,则返回不会空的链表,否则递归传递更小数值的链表下一位,即l1.next = mergeTwoLists(l1.next,l2);或l2.next = mergeTwoLists(l1,l2.next);

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if(l1 == null || l2 == null){
            return l1 == null ? l2 :l1;
        }
        if(l1.val <= l2.val){
            l1.next = mergeTwoLists(l1.next,l2);
            return l1;
        }else {
            l2.next = mergeTwoLists(l1,l2.next);
            return l2;
        }
    }

 

标签:java,cur,offer25,next,链表,l2,l1,ListNode
来源: https://blog.csdn.net/ic_xcc/article/details/112918312