蒙自建设网站,阳泉网站建设,中山建网站推荐,网站建设捌金手指花总二七给你两个非空的链表#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的#xff0c;并且每个节点只能存储一位数字。请你将两个数相加#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字0之外#xff0c;这两个数都不会以0开头。 输入表示两个非负的整数。它们每位数字都是按照逆序的方式存储的并且每个节点只能存储一位数字。请你将两个数相加并以相同形式返回一个表示和的链表。你可以假设除了数字0之外这两个数都不会以0开头。 输入l1 [2,4,3], l2 [5,6,4]
输出[7,0,8]
解释342 465 807.转载数据结构链表及其C实现
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {//头尾节点ListNode *headnullptr,*tailnullptr;int carry0;//不为null就遍历while(l1||l2){//获取当前链表节点值int n1l1?l1-val:0;int n2l2?l2-val:0;//相加int sumn1n2carry;if(!head){//为空创建新的头尾节点headtailnew ListNode(sum%10);}else{//不为空值加在尾部tail-nextnew ListNode(sum%10);tailtail-next;}carrysum/10;if(l1){l1l1-next;}if(l2){l2l2-next;}//最后不为0就在尾部增加一个新结点if(carry0)tail-nextnew ListNode(carry); }return head;}
};优化减少代码
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode *dummy new ListNode(0); // 虚拟头节点ListNode *current dummy;int carry 0;while (l1 || l2 || carry) {int n1 l1 ? l1-val : 0;int n2 l2 ? l2-val : 0;int sum n1 n2 carry;current-next new ListNode(sum % 10);current current-next;carry sum / 10;if (l1) l1 l1-next;if (l2) l2 l2-next;}return dummy-next; // 返回真实的头节点而非虚拟头节点}
};