题目详情: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
题目要求将两个链表当做两个整数来处理,依次相加个十百千...位,最后将加和作为一个新的链表返回。
做链表题目的贴士:自己创建一个虚的头结点,省的后续好多判断条件了。
这个题看起来挺简单的,要考虑的情况很多。我的思路是两数相加,不够的用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 *Head = new ListNode(0);
ListNode *p = Head;
ListNode *q = l1;
ListNode *r = l2;
int add_one = 0;
while( (add_one == 1) || (q) || (r) )
{
int sum = add_one + ((q) ? (q -> val):0 ) + ((r) ? (r -> val):0);
r = (r) ? (r -> next):NULL;
q = (q) ? (q -> next):NULL;
if(sum >= 10)
{
sum = sum % 10;
add_one = 1;
}
else
{
add_one = 0;
}
ListNode *newnode = new ListNode(sum);
p -> next = newnode;
p = p -> next;
}
return Head -> next;
}
};