Add Two Numbers

来源:互联网 发布:plc编程基础知识 编辑:程序博客网 时间:2024/06/17 16:12

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

主要是要保存进位,并且两个链表的长度可能不一样,期间也要考虑到结束时是否含有进位!


class Solution {public:ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {if (!l1)return l2;if (!l2)return l1;int carry = 0, sum = 0;ListNode *current1=l1, *current2=l2,*first=new ListNode(-1),*last=NULL;last = first;while (current1 && current2){sum = current1->val + current2->val + carry;ListNode *newNode = new ListNode(sum % 10);carry = 0;if (last==first)first->next = newNode;if (sum >= 10)carry = 1;last->next = newNode;last = newNode;current1 = current1->next;current2 = current2->next;}while (current1){if (carry > 0){++current1->val;carry = 0;}if (current1->val >= 10){current1->val = current1->val % 10;carry = 1;}ListNode *newNode = new ListNode(current1->val);last->next = newNode;last = newNode;current1 = current1->next;}while (current2){if (carry > 0){++current2->val;carry = 0;}if (current2->val >= 10){current2->val = current2->val % 10;carry = 1;}ListNode *newNode = new ListNode(current2->val);last->next = newNode;last = newNode;current2 = current2->next;}if (carry > 0){ListNode *newNode = new ListNode(1);last->next = newNode;last = newNode;}last = NULL;return first->next;}};




0 0