嘉峪关市网站建设_网站建设公司_论坛网站_seo优化
2025/12/27 9:00:49 网站建设 项目流程

一、题目描述

二、算法原理

思路:模拟

因为本来我们是要把链表里面的值进行翻转的,但是题目已经帮我们翻转了,所以可以直接进行加法操作就行,不过要考虑进位问题,我们使用一个值 t 来保存这个两个链表加的值,假设 t = 12 ,那么这个最终的结果是:t % 10 = 2,此时进行进位操作: t = t / 10 = 1;然后不断的进行加法运算直到:运算到第一个和第二个链表的最后值,而且当 t != 0 时,代表着加法运算还没有结束。

三、代码实现

最佳实现:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int t = 0;//进位值 ListNode* newhead = new ListNode(0);//一个新链表的头结点,这个头结点用于返回新链表的第一个值 ListNode* cur1 = l1,*cur2 = l2; ListNode* prev = newhead;//链表的最后一个结点,用于链接加入的值 while(cur1 || cur2 || t)//只要符合其中的任意一个条件,就代表着这个链表没有结束加法运算 { if(cur1) { t += cur1->val; cur1 = cur1->next; } if(cur2) { t += cur2->val; cur2 = cur2->next; } prev->next = new ListNode(t % 10);//链接新的结点,保存该位的值 prev = prev->next;//尾结点进行更新 t = t / 10;//保存进位值 } return newhead->next; } };

代码探索:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* phead = new ListNode; phead->next = nullptr; ListNode* cur1 = l1,*cur2 = l2; ListNode* phead_tmp = phead; int tmp = 0; while(cur1 != nullptr && cur2 != nullptr) { tmp += cur1->val + cur2->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur1 = cur1 -> next; cur2 = cur2 -> next; } while(cur1 != nullptr) { tmp += cur1->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur1 = cur1->next; } while(cur2 != nullptr) { tmp += cur2->val; ListNode* node = new ListNode; node->val = tmp % 10; node->next = nullptr; phead_tmp->next = node; phead_tmp = node; node = nullptr; tmp /= 10; cur2 = cur2->next; } if(tmp) { ListNode* node = new ListNode; node->val = tmp; node->next = nullptr; phead_tmp->next = node; node = nullptr; } return phead->next; } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询