博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 21 Merge Two Sorted Lists
阅读量:6192 次
发布时间:2019-06-21

本文共 3082 字,大约阅读时间需要 10 分钟。

 

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 = Noneclass 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

 

转载地址:http://hngda.baihongyu.com/

你可能感兴趣的文章
循环数组有几种方法?
查看>>
五月这一篇百度 iOS 面试总结轰动整个开发界【头条热搜】
查看>>
大学生们,请报“人工智能”相关专业,为了人类!
查看>>
Android 自定义View之下雨动画
查看>>
区块链核心技术能力建设得到高度重视!将着力于四方面推进!
查看>>
HandyJSON.Metadata.Class Xcode10.2, swift5.0 报错 linker command failed with exit
查看>>
浅谈负载均衡算法与实现
查看>>
前端实用效率工具(插件、APP等)
查看>>
记一次maven nexus私服发布
查看>>
程序员不得的不会的接口文档
查看>>
Redis
查看>>
Flutter淘宝App之首页聚划算倒计时的实现
查看>>
面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
查看>>
MacOS app crash文件分析与定位
查看>>
GMQ稳定币旨在通过区块链技术建立一个无现金社会
查看>>
Java HttpResponse 详解
查看>>
Image Restoration Using Very Deep Convolutional Encoder-Decoder Networks with Sy
查看>>
撩课大前端-面试宝典-第六篇
查看>>
选择排序算法
查看>>
CSS3 border-top-right-radius属性
查看>>