{ "type": "code_options", "author": "csdn.net", "source": "solution.md", "exercise_id": "fc109d2e803d4682bc8c90bff1aa9428", "keywords": "递归,链表,数学", "title": "两数相加", "desc": [ { "content": "\n

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

 

示例 1:

\"\"
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:
[7,0,8]
解释:
342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0]
输出:
[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:
[8,9,9,9,0,0,0,1]

 

提示:

", "language": "markdown" } ], "answer": [ { "content": "", "language": "cpp" } ], "prepared": [ [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ], [ { "content": "", "language": "cpp" } ] ], "template": { "content": "struct ListNode\n{\n\tint val;\n\tstruct ListNode *next;\n};\nstruct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)\n{\n\tstruct ListNode *pp = NULL, *p = l1;\n\tstruct ListNode *qp = NULL, *q = l2;\n\tint carry = 0;\n\twhile (p != NULL && q != NULL)\n\t{\n\t\tp->val += q->val + carry;\n\t\tcarry = 0;\n\t\tif (p->val >= 10)\n\t\t{\n\t\t\tcarry = 1;\n\t\t\tp->val -= 10;\n\t\t}\n\t\tpp = p;\n\t\tp = p->next;\n\t\tqp = q;\n\t\tq = q->next;\n\t}\n\tif (q)\n\t{\n\t\tpp->next = p = q;\n\t\tqp->next = NULL;\n\t}\n\twhile (carry && p)\n\t{\n\t\tp->val += carry;\n\t\tcarry = 0;\n\t\tif (p->val >= 10)\n\t\t{\n\t\t\tcarry = 1;\n\t\t\tp->val -= 10;\n\t\t}\n\t\tpp = p;\n\t\tp = p->next;\n\t}\n\tif (carry)\n\t{\n\t\tstruct ListNode *n = (struct ListNode *)malloc(sizeof(struct ListNode));\n\t\tn->val = 1;\n\t\tn->next = NULL;\n\t\tpp->next = n;\n\t}\n\treturn l1;\n}", "language": "cpp" }, "node_id": "dailycode-ac2a4675e933469195468c03c2062381", "license": "csdn.net", "created_at": 1637894158, "topic_link": "https://bbs.csdn.net/topics/600469916" }