1. 原题链接:https://leetcode.com/problems/add-two-numbers/
2. 解题思路
- 两个链表相加的解题思路比较直接
- 需要注意两个链表的长度不同,有些边界情况需要考虑周到
- 考虑进位的情况
3. 算法
- 首先,遍历两个链表长度相同的部分
- 然后,遍历长度较长的链表
4. 实现
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode header(-1); int value = 0; ListNode *prev = &header; while(l1 && l2){ int v1 = l1->val; int v2 = l2->val; int sum = v1 + v2 + value; int current_value = sum % 10; value = sum / 10; prev->next = new ListNode(current_value); l1 = l1->next; l2 = l2->next; prev = prev->next; } while(l1){ int v = l1->val; int sum = v + value; int current_value = sum % 10; value = sum / 10; prev->next = new ListNode(current_value); l1 = l1->next; prev = prev->next; } while(l2){ int v = l2->val; int sum = v + value; int current_value = sum % 10; value = sum / 10; prev->next = new ListNode(current_value); l2 = l2->next; prev = prev->next; } if(value > 0){ prev->next = new ListNode(value); } return header.next; } };
来源:https://www.cnblogs.com/wengle520/p/12293196.html