【剑斩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;
    }
};
相关推荐
刘马想放假2 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠3 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦10 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠11 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾11 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82111 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q11 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒11 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
疯狂成瘾者11 天前
Java 集合 LinkedList 详解:链表结构、常用方法和队列使用
java·开发语言·链表
WL学习笔记11 天前
单项不带头不循环链表
数据结构·链表