美文网首页
21. Merge Two Sorted Lists

21. Merge Two Sorted Lists

作者: 窝火西决 | 来源:发表于2019-05-29 18:23 被阅读0次

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Example:

Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4

题目要求

给定两个有序的链表,把他俩合并成一个有序的链表。

思路

首先明确,这两个链表本身有序,则我们在合并时,一个全部合并完了,另一个直接接到表尾就好了。
创建一个虚拟头结点,指向新表头,即两个head较小的那一个,之后再逐个比较,以此链接下去

代码

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1==null&&l2!=null) {
            return l2;
        }
        if (l2==null&&l1!=null) {
            return l1;
        }
        
        if (l1==null&&l2==null) {
            return l1;
        }
        
        ListNode q1=l1,q2=l2,headr=new ListNode(0);//定义两个指针用于遍历,一个虚拟头结点指向新表头
        if (q1.val<q2.val) {
            headr.next=q1;
            q1=q1.next;
        }else {
            headr.next=q2;
            q2=q2.next;
        }
        ListNode qr =headr.next;//qr用于增加新表
        
        while (q1!=null&&q2!=null) {
            if (q1.val<q2.val) {
                qr.next=q1;
                qr=qr.next;
                q1=q1.next;
            }else {
                qr.next=q2;
                qr=qr.next;
                q2=q2.next;
            }
            
        }
        if (q1!=null) {//即q2为null(都不为空就还在上面循环里了),所以把q1剩下的连接到新表尾部
            qr.next=q1;
        }
        
        if (q2!=null) {
            qr.next=q2;
        }
        
        return headr.next;//返回新表头

    }

相关文章

网友评论

      本文标题:21. Merge Two Sorted Lists

      本文链接:https://www.haomeiwen.com/subject/jsfutctx.html