刷题10:归并两个有序的链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题10:归并两个有序的链表相关的知识,希望对你有一定的参考价值。

Leetcode:21. 合并两个有序链表

解法:定义一个虚拟头节点pre和一个永远指向链表尾部节点的指针temp,如果两链表都不为空,比较两链表当前节点的值,较小的节点加链表尾部,以此类推,直到退出循环。退出循环时,如果两链表之前就不为空,则退出while一定还有一个链表不为空,因为每个链表都是有序的,因此直接将没遍历完的链表添加到总链表尾部即可。在遍历的过程中,temp始终保持在链表的尾部,用于在尾部添加节点。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode pre = new ListNode();
        ListNode temp = pre;

        while(l1 != null && l2 != null){
            if(l1.val < l2.val){
                temp.next = l1;
                l1 = l1.next;
            }else{
                temp.next = l2;
                l2 = l2.next;
            }
            temp = temp.next;
        }

        if(l1 != null) temp.next = l1;
        if(l2 != null) temp.next = l2;

        return pre.next;
    }
}

以上是关于刷题10:归并两个有序的链表的主要内容,如果未能解决你的问题,请参考以下文章

有序链表合并

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

合并两个有序链表

LeetCode刷题之合并排序链表

归并链表(简单方法)

合并K个有序链表