LeetCode:面试题 02.05. 链表求和(C++带详细注释)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode*l3=new ListNode;//存结果链表
ListNode*l4=l3;//l4指向l3头部,之后l3会后移,返回l4
int m=0,n=0,q=0;//进位值,和,余数值
while(l1||l2||m!=0)//下一位有值时循环
{
n=(l1?l1->val:0)+(l2?l2->val:0)+m;//三数之和
q=n%10;//余数
m=n/10;//进位
l3->val=q;//对结果表赋值
if(l1) l1=l1->next;//遍历
if(l2) l2=l2->next;
if(l1||l2||m!=0)
{
l3->next=new ListNode;
l3=l3->next;//进下一位
}
}
return l4;//返回l4不是l3
}
};