【剑斩OFFER】算法的暴力美学——链表相加(二)

一、题目描述

二、算法原理

三、代码实现

cpp 复制代码
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
#include <bits/types/struct_tm.h>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
    ListNode* addInList(ListNode* head1, ListNode* head2) {
        ListNode* prev1 = nullptr;
        ListNode* prev2 = nullptr;
        ListNode* tmphead1 = nullptr;
        ListNode* tmphead2 = nullptr;
        while(head1 || head2)//翻转这两个链表
        {
            if(head1)
            {
                tmphead1 = head1->next;
                head1->next = prev1;
                prev1 = head1;
                head1 = tmphead1;
            }

            if(head2)
            {
                tmphead2 = head2->next;
                head2->next = prev2;
                prev2 = head2;
                head2 = tmphead2;
            }
        }
        ListNode* cur1 = prev1,*cur2 = prev2;

        int t = 0;
        ListNode* head = new ListNode(0);
        ListNode* node = head;
        while(cur1 || cur2 || t)//对这两个链表进行加法运算
        {
            if(cur1)
            {
                t += cur1->val;
                cur1 = cur1->next;
            }

            if(cur2)
            {
                t += cur2->val;
                cur2 = cur2->next;
            }

            ListNode* tmp = new ListNode(t % 10);
            node->next = tmp;
            node = tmp;
            t /= 10;
        }


        ListNode* prev_node = nullptr;
        ListNode* cur = head->next;
        ListNode* tmpnode = nullptr;
        while(cur)//再翻转回来
        {
            tmpnode = cur->next;
            cur->next = prev_node;
            prev_node = cur;
            cur = tmpnode;
            tmpnode = nullptr;
        }

        return prev_node;
    }
};
相关推荐
学逆向的7 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
jeo陽11 小时前
04-循环实战:素数、最大公约数、级数求和与枚举法
c语言·开发语言·数据结构
slandarer12 小时前
MATLAB | 趣味编程——动态字符串甜甜圈和爱心
数据结构·matlab·趣味编程
UIU11412 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
爱读书的小胖13 小时前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
inrichtt13 小时前
第七课时:STM32时钟系统揭秘:从零理解时钟树
c语言·数据结构·stm32·单片机·嵌入式硬件
xxwl58514 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
Logic10115 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
垆边人似月.16 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫16 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习