题目:
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
注意:
链表l1和l2长度可能不同,要注意处理某个链表剩余的高位;
链表上的数相加,要判断进位是否为0。
代码:
/**
* 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 dummy(0);//头节点
ListNode *p=&dummy;//指针
int carry=0;//进位
while(l1||l2||carry){//只要l1,l2,进位有一不为0,就要加
int sum=(l1?l1->val:0)+(l2?l2->val:0)+carry;//从个位加起来(因为数是倒置存储的)
carry=sum/10;//计算进位
p->next=new ListNode(sum%10);//output,每个节点存储
p=p->next;//output的下一个节点
l1=l1?l1->next:l1;// l1和l2的下一个节点;
l2=l2?l2->next:l2;
}
return dummy.next;
}
};