牛客热题:链表相加(二)

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

文章目录

牛客热题:链表相加(二)

题目链接

链表相加(二)_牛客题霸_牛客网 (nowcoder.com)

方法一:反转

思路

  • 将两个链表head1和head2都进行反转
  • 然后将两个链表相加的结果存储在另一个链表之中

代码

cpp 复制代码
    ListNode* ReverseList(ListNode* head)
    {
        //空链表直接返回和一个节点的情况
        if(head == nullptr || head->next == nullptr) return head;
         
        ListNode* cur = head;
 
        ListNode* n = cur->next;
 
        ListNode* pre = nullptr;
 
        while(cur != nullptr)
        {
            cur->next = pre;
            pre = cur;
            cur = n;
            if(n != nullptr)
            n = n->next;
        }
 
        return pre;
    }

    ListNode* addInList(ListNode* head1, ListNode* head2) 
    {
        ListNode* sum = new ListNode(0);

        ListNode* h1 = ReverseList(head1);
        ListNode* h2 = ReverseList(head2);
        ListNode* s = sum;
        int v = 0;
        while(h1 != nullptr || h2 != nullptr)
        {
            v /= 10;
            if(h1 != nullptr) v += h1->val, h1 = h1->next;
            if(h2 != nullptr) v += h2->val, h2 = h2->next;
            s->next = new ListNode(v % 10);
            s = s->next;
        }
        v /= 10;
        if(v)
        {
            s->next = new ListNode(v % 10);
            s = s->next;
        }

        sum->next = ReverseList(sum->next);

        return sum->next;
    }

复杂度

时间复杂度:O(N), 反转是O(N), 相当于遍历了两次链表

空间复杂度:O(M + N), 创建了一个max(m, n) + 1的链表

相关推荐
代码雕刻家28 分钟前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
Kalika0-02 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
代码雕刻家2 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
小字节,大梦想4 小时前
【C++】二叉搜索树
数据结构·c++
我是哈哈hh4 小时前
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
服务器·数据结构·c++·算法·机器学习·深度优先·剪枝
丶Darling.5 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
labuladuo5205 小时前
Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
数据结构·c++·算法
Indigo_code5 小时前
【数据结构】【链表代码】合并有序链表
数据结构·windows·链表
jiyisuifeng19915 小时前
代码随想录训练营第54天|单调栈+双指针
数据结构·算法
我言秋日胜春朝★5 小时前
【C++】红黑树
数据结构