本题考查简单的单链表,要求两链表代表的数相加,成为第三个链表。
只需要一位一位的相加,有进位使用carry标记。
注意,C++中开链表ListNode后加指针,链表中的元素使用->引出。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(0ptr) {}
* ListNode(int x) : val(x), next(0ptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *root = new ListNode(0);
ListNode *cursor = root;
int carry = 0;
while(l1 != 0 || l2 != 0 || carry != 0)
{
int l1val = l1 != 0 ? l1->val : 0;
int l2val = l2 != 0 ? l2->val : 0;
int sumval = l1val + l2val + carry;
carry = sumval / 10;
ListNode *sumNode = new ListNode(sumval % 10);
cursor->next = sumNode;
cursor = sumNode;
if(l1 != 0) l1 = l1->next;
if(l2 != 0) l2 = l2->next;
}
return root->next;
}
};