题目描述
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
出处
思路
逆序两数相加也是逆序返回,可以用一个进位位来模拟(进位位只有可能是0或1)。要考虑谁长谁短的问题,最终结果可能需要在最长的基础上再新加一位(新建一个尾结点)。
代码
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* p=l1;ListNode* q=l2;ListNode* res=l1;int num=0,sum=0;while(p->next&&q->next){sum=p->val+q->val+num;if(sum<10){p->val=sum;num=0;}else{p->val=sum-10;num=1;//进位}p=p->next;q=q->next;}sum=p->val+q->val+num;if(sum<10){p->val=sum;num=0;}else{p->val=sum-10;num=1;//进位}if(!p->next&&!q->next){//一样长if(num){p->next=new ListNode(1);return res;}}if(q->next&&!p->next){//l2比l1长p->next=q->next;}p=p->next;while(p){//l1比l2长sum=p->val+num;if(sum<10){p->val=sum;num=0;}else{p->val=sum-10;num=1;//进位}q=p;p=p->next;}if(num){q->next=new ListNode(1);}return res;}
};