【剑斩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;
    }
};
相关推荐
一切皆是因缘际会9 小时前
AI智能新时代
数据结构·人工智能·ai·架构
计算机安禾11 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法
指针战神12 小时前
synchronized简易版Redis版跳表实现(注释干货)
数据结构
handler0113 小时前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
糖果店的幽灵15 小时前
Pandas DataFrame 数据结构详解
数据结构·pandas
起个破名想半天了17 小时前
算法与数据结构之Dijkstra算法
数据结构·dijkstra·单源最短路径·迪杰斯特拉算法
啦啦啦啦啦zzzz17 小时前
数据结构:哈夫曼编码
数据结构·c++·哈夫曼编码
ChillCoding17 小时前
更新中:C++ STL库,查找排序(基础算法),数据结构,数学算法,竞赛相关基础
数据结构·c++·算法
apcipot_rain18 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
落羽的落羽19 小时前
【项目】JsonRpc框架——开发实现2(业务层)
linux·数据结构·c++·人工智能·算法·json·动态规划