题解 | #合并两群能量值#

合并两群能量值

https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec

解题思路

  • 先判断其中是否有空链表,有的话就返回另外一个链表;
  • 创建一个变量辅助移动指针,当l1的值比l2大的时候,则移动l1的链表;否则插入l1链表中,移动l2的链表;
  • 最后,如果l2没有遍历完成,则将其剩下的接入l1链表尾端。

代码

写法一

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2) {
        // write code here
        if(l1 == nullptr)
        {
            return l2;
        }

        if(l2 == nullptr)
        {
            return l1;
        }

        
        ListNode* dummy = new ListNode(-1);
        dummy->next = l1;
        ListNode* pre = dummy;

        while (l1 && l2) 
        {
            if(l1->val >= l2->val)
            {
                pre->next = l1;
                l1 = l1->next;
                
            }
            else 
            {
                pre->next = l2;
                l2 = l2->next;
                               
            }
            pre = pre->next;
        
        }

        if(l1 != nullptr)
        {
            pre->next = l1;
        }
        if(l2 != nullptr)
        {
            pre->next = l2;
        }
        return dummy->next;
    }
};

写法二

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    ListNode* mergeEnergyValues(ListNode* l1, ListNode* l2) {
        // write code here
        if(l1 == nullptr)
        {
            return l2;
        }

        if(l2 == nullptr)
        {
            return l1;
        }

        
        ListNode* dummy = new ListNode(-1);
        dummy->next = l1;
        ListNode* pre = dummy;

        while (l1 && l2) 
        {
            if(l1->val >= l2->val)
            {
                l1 = l1->next;
                
            }
            else 
            {
                pre->next = l2;
                ListNode* tmp = l2->next;
                l2->next = l1;
                l2 = tmp;
            }
            pre = pre->next;
            
        
        }

     
        if(l2 != nullptr)
        {
            pre->next = l2;
        }
        return dummy->next;
    }
};

复杂度

  • 时间复杂度:
  • 空间复杂度:
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务