您的位置:首页 > 其它

Leetcode 2 Add two Numbers

2015-12-14 23:39 417 查看
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
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {

}
};

class Solution {
public:
/*ListNode* convert(ListNode* head) {//link reverse
ListNode* cur=head;
ListNode* next=cur->next;
ListNode* pre=NULL;
ListNode* tmp = NULL;
while(next!=NULL) {
cur->next = pre;
pre = cur;
tmp = next->next;
next->next=cur;
cur = next;
next = tmp;
}

return cur;
}

int listLength(ListNode* head) {// the length of the link
int cnt = 0;
while(head!=NULL) {
cnt++;
head = head->next;
}
}*/
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* h1 = l1;
ListNode* ans = NULL;
ListNode* h2 = l2;

ans=h1;
int cnt = 0;
ListNode* pre = NULL;

for(; h1 != NULL && h2 != NULL; h1 = h1->next, h2=h2->next) {
pre=h1;
h1->val += h2->val+cnt;
cnt = h1->val/10;
h1->val = h1->val%10;
}

ListNode *h = h1 == NULL ? h2 : h1;

if(h != h1) {
pre->next = h;
}

for(; h!=NULL; h=h->next) {
pre = h;
h->val += cnt;
cnt = h->val/10;
h->val %= 10;
}

if(cnt > 0) {
pre->next = new ListNode(cnt);
}
return ans;
}
};

int main() {
ListNode *h1 = new ListNode(1), *h2 = new ListNode(9);
h2->next = new ListNode(9);
Solution *s1 = new Solution();
ListNode *ans = s1->addTwoNumbers(h1, h2);
while(ans!=NULL) {
cout << ans->val << " ";
ans = ans->next;
}
cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: