【剑斩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;
    }
};
相关推荐
哈里谢顿5 小时前
跳表(Skip List):简单高效的有序数据结构
数据结构
任沫1 天前
字符串
数据结构·后端
祈安_2 天前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
NineData3 天前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
琢磨先生David11 天前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
qq_4542450311 天前
基于组件与行为的树状节点系统
数据结构·c#
超级大福宝11 天前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
岛雨QA11 天前
常用十种算法「Java数据结构与算法学习笔记13」
数据结构·算法
weiabc11 天前
printf(“%lf“, ys) 和 cout << ys 输出的浮点数格式存在细微差异
数据结构·c++·算法
wefg111 天前
【算法】单调栈和单调队列
数据结构·算法