题意
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
输入
(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出
7 -> 8 -> 0 -> 7
1. 迭代
正常思路的话都是从低位开始相加,计算进位carry,模拟加法过程。但这里数据表示是数字高位位于链表开始位置,所以我们很容易想到翻转链表,然后从链表头开始遍历相加。下面给出代码:
ListNode* reverseList(ListNode* head)
{
ListNode* cur = head, *pre = NULL;
while(cur != NULL)
{
ListNode* post = cur->next;
cur->next = pre;
pre = cur;
cur = post;
}
return pre;
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* p1 = reverseList(l1);
ListNode* p2 = reverseList(l2);
ListNode* res = new ListNode(0);
ListNode* tempres = res;
int carry = 0;
while(p1 != NULL || p2 != NULL