2026/5/13 14:42:12
网站建设
项目流程
上海网站建设熊掌号,住建部官方网站,百度云搜索引擎入口 百度网盘,中国发布网一、题目描述二、算法原理思路#xff1a;模拟因为本来我们是要把链表里面的值进行翻转的#xff0c;但是题目已经帮我们翻转了#xff0c;所以可以直接进行加法操作就行#xff0c;不过要考虑进位问题#xff0c;我们使用一个值 t 来保存这个两个链表加的值#xff0c;假…一、题目描述二、算法原理思路模拟因为本来我们是要把链表里面的值进行翻转的但是题目已经帮我们翻转了所以可以直接进行加法操作就行不过要考虑进位问题我们使用一个值 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; } };