【剑斩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;
    }
};
相关推荐
hold?fish:palm7 小时前
24 回文链表
数据结构·c++·链表
qeen8711 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
冻柠檬飞冰走茶12 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
Nil20813 小时前
leetcode 189轮转数组
数据结构·算法·leetcode
依然鸣14 小时前
PTA团体程序设计天梯赛L1真题讲解L1-085-088
数据结构·c++·经验分享·算法·深度优先·pat考试
Brilliantwxx15 小时前
【算法从零到千】【51-54】逆序对(分治+递归算法)
数据结构·算法·排序算法
小星星闪亮登场15 小时前
2026河南萌新联赛第四场--南阳理工学院
数据结构·算法·贪心算法·动态规划·哈希算法·广度优先
土司大王15 小时前
LeetCode hot100——两数之和
数据结构·算法·leetcode
wabs66616 小时前
关于字符串【力扣344.反转字符串的思考】
数据结构·算法·leetcode
LuminousCPP16 小时前
数据结构基础篇(二):顺序表与链表全方位对比|从内存布局到 CPU 缓存理解底层差异
c语言·数据结构·经验分享·链表·缓存