• leetcode 21 Merge Two Sorted Lists


    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.

    我的解决方案:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
     
    
    class Solution 
    {
    public:
        ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) 
        {
            if(NULL==l1) return l2;
            if(NULL==l2) return l1;
           
             ListNode* head = NULL;
             
             if(l1->val < l2->val)     
             {
                 head = l1; 
                 l1 = l1->next; 
                 
             }
              else                       
             { 
                 head = l2; 
                 l2 = l2->next;
            }
    
            ListNode* p = head;     // pointer to form new list
            
            while(l1!=NULL&&l2!=NULL)
            {
                if(l1->val < l2->val)
                {
                    p->next = l1;
                    l1 = l1 ->next;
                }
                
                else 
                {
                    p->next = l2;
                    l2 = l2 ->next;
                }
                p = p->next;
            }
            
            if(l1)
            {
                p->next = l1;
            }
            
            else
            {
                p->next = l2;
            }
            
            
            
            return head;
        }
    };


     

    递归c++解法:

    class Solution {
    public:
        ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
            if(l1 == NULL) return l2;
            if(l2 == NULL) return l1;
    
            if(l1->val < l2->val) {
                l1->next = mergeTwoLists(l1->next, l2);
                return l1;
            } else {
                l2->next = mergeTwoLists(l2->next, l1);
                return l2;
            }
        }
    };
    


     

    python递归解决方案:

    def mergeTwoLists(self, l1, l2):
        if not l1:
            return l2
        elif not l2:
            return l1
        else:
            if l1.val <= l2.val:
                l1.next = self.mergeTwoLists(l1.next, l2)
                return l1
            else:
                l2.next = self.mergeTwoLists(l1, l2.next)
                return l2
    

    python非递归:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        # @param {ListNode} l1
        # @param {ListNode} l2
        # @return {ListNode}
        def mergeTwoLists(self, l1, l2):
            p1 = l1
            p2 = l2
            guard = ListNode(0)
            q = guard
            while p1 is not None and p2 is not None:
                if p1.val <= p2.val:
                    q.next = p1
                    p1 = p1.next
                    q = q.next
                else:
                    q.next = p2
                    p2 = p2.next
                    q = q.next
            if p1 is not None:
                q.next = p1
            if p2 is not None:
                q.next = p2
            return guard.next
    



     

    python递归解决方案2:

    If both lists are non-empty, I first make sure a starts smaller, use its head as result, and merge the remainders behind it. Otherwise, i.e., if one or both are empty, I just return what's there.
    
    class Solution:
        def mergeTwoLists(self, a, b):
            if a and b:
                if a.val > b.val:
                    a, b = b, a
                a.next = self.mergeTwoLists(a.next, b)
            return a or b
    


     

  • 相关阅读:
    关于重复记录
    easyui-dataGrid
    初尝easyui
    字符串处理の合并记录行
    实现P2P远程控制项目的基本逻辑
    命令行启动vscode中的ssh-remote插件并指定路径
    关于TCP三次握手的意义及其具体实现解释
    Git使用建议及规范
    MySQL C API的参数化查询
    gdb定位程序CPU占用过高问题
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301330.html
Copyright © 2020-2023  润新知