剑指offer Leetcode 25.合并两个排序的链表
发布日期:2021-05-06 23:39:28 浏览次数:24 分类:精选文章

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

image-20201204170602268

解法1:迭代

注意:

​ ●要考虑输入为空的情况。

​ ●要注意返回和遍历,用一个哨兵节点来返回,用一个cur指针来遍历

​ ●注意每轮要更新cur即cur = cur->next;

代码:

class Solution {   public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {           //考虑输入为空        if(l1 == NULL && l2 == NULL)            return NULL;        if(l1 == NULL)            return l2;        if(l2 == NULL)            return l1;        //要新建一个哨兵节点,利用哨兵节点的next来返回head        ListNode* dummynode = new ListNode;        //利用一个指针来遍历        ListNode* cur = dummynode;        while(l1 != NULL && l2 != NULL){               if(l1->val <= l2->val){                   cur->next = l1;                l1 = l1->next;            }            else{                   cur->next = l2;                l2 = l2->next;            }            cur = cur->next;        }        //至少有一个为空        if(l1 != NULL)            cur->next = l1;        if(l2 != NULL)            cur->next = l2;        return dummynode->next;    }};

解法2:递归

注意:

●通过l1和l2来返回最后的头节点

代码:

class Solution {   public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {           if(l1 == NULL && l2 == NULL)            return NULL;        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(l1, l2->next);            return l2;        }    }};
上一篇:最近在学习nosql先看看他们的优缺点吧
下一篇:一篇好文章带你走出阴霾

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月25日 14时20分20秒