题目给出两个链表,两个分别展示两个以逆序形式表示的十进制数,要求返回一个链表,以逆序形式表示这两个十进制数的和。这道题主要难点有两个,一个是当两个数位数不同的情况如何考虑,另一个是当末尾还需进位的时候需要再加一。根据条件,我们创造第三个链表head作为两个链表的和,代码如下:
/**
* 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 *head = new ListNode (-1);
ListNode *h = head;
int sum = 0; //计算和
int carry = 0; //计算进位
while(l1 != NULL || l2 != NULL) //当链表l1和链表l2均为空时,循环停止
{
sum = 0; //将和的值初始化
if(l1 != NULL)
{
sum += l1 -> val; //提取当前位置链表的值
l1 = l1 -> next; //提取之后将链表挪到下一个值
}
if(l2 != NULL)
{
sum += l2 -> val;
l2 = l2 -> next;
}
if(carry == 1) sum++; //将进位加到和中
h -> next = new ListNode(sum%10);
h = h -> next;
if(sum >= 10) carry = 1; //判断下一位是否需要进位
else carry = 0;
}
if(l1==NULL && l2 == NULL && carry == 1)
h -> next = new ListNode(1);
return head -> next;
}
};