LootCode21: 合并两个有序链表

一、题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

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

二、解题思路

  1. 先判断有无空链表

    if(l1==nullptr)
    	return l2;
    if(l2==nullptr)
    	return l1;
    
  2. 确定合并链表的头结点(整数值小的结点)

    ListNode* head;
    l1->val>l2->val ? (head=l2,l2=l2->next):(head=l1,l1=l1->next); 
    
  3. 连接后续结点

    while(l1!=nullptr&&l2!=nullptr){
          
                      
                l1->val>l2->val ? (p->next=l2,l2=l2->next):(p->next=l1,l1=l1->next);            
                p=p->next;            
            }
    

三、我的代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
    
    
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    
    
        if(l1==nullptr)
            return l2;
        if(l2==nullptr)
            return l1;
        ListNode* head;
        l1->val>l2->val ? (head=l2,l2=l2->next):(head=l1,l1=l1->next);        
        ListNode* p=head;
        while(l1!=nullptr&&l2!=nullptr){
    
                
            l1->val>l2->val ? (p->next=l2,l2=l2->next):(p->next=l1,l1=l1->next);            
            p=p->next;            
        }
        p->next=(l1==nullptr)? l2:l1;        
        return head;
    }
};

四、测试结果

猜你喜欢

转载自blog.csdn.net/weixin_45341339/article/details/111086484