题目描述: 使用链表模拟进位加法,两个链表相加,链表顺序为数字低位到高位
Examples:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
思路:模拟数字加法要考虑的主要就是进位问题
需要考虑的几个点是:
1 相加之后的第一个节点在循环中如何表示:可以新建一个节点head,其val值为0作为头指针节点,最后返回head->next;
2 一定要记得每一次操作后更新三个链表的节点;
3 遍历完两个相加的链表节点之后并不是真正技术,还要考虑进位值是否为0;例 5 + 5 返回 0 -> 1
/**
* 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(0);
ListNode * node = head;
int val = 0,num = 0;
while(l1 && l2)
{
val = l1-> val + l2->val + num;
ListNode* newNode = new ListNode(val % 10);
num = val / 10;
node -> next = newNode;
node = node ->next;
l1 = l1 -> next;
l2 = l2 -> next;
}
while(l1)
{
val = l1 -> val + num;
ListNode* newNode = new ListNode(val % 10);
num = val / 10;
node -> next = newNode;
node = node ->next;
l1 = l1 -> next;
}
while(l2)
{
val = l2 -> val + num;
ListNode* newNode = new ListNode(val % 10);
num = val / 10;
node -> next = newNode;
node = node ->next;
l2 = l2 -> next;
}
while(num != 0)
{
val = num;
ListNode* newNode = new ListNode(val % 10);
num = val / 10;
node -> next = newNode;
node = node ->next;
}
node -> next = NULL;
return head -> next;
}
};