链表求和 II-LintCode
2017-09-19 14:28
405 查看
假定用一个链表表示两个数,其中每个节点仅包含一个数字。假设这两个数的数字顺序排列,请设计一种方法将两个数相加,并将其结果表现为链表的形式。
样例:
给出 6->1->7 + 2->9->5。即,617 + 295。
返回 9->1->2。即,912 。
样例:
给出 6->1->7 + 2->9->5。即,617 + 295。
返回 9->1->2。即,912 。
#ifndef C221_H #define C221_H #include<iostream> #include<vector> using namespace std; struct ListNode{ int val; ListNode *next; ListNode(int x) :val(x), next(NULL) {} }; class Solution { public: /* * @param l1: The first list. * @param l2: The second list. * @return: the sum list of l1 and l2. */ ListNode * addLists2(ListNode * l1, ListNode * l2) { // write your code here vector<int> v; if (getLength(l1) >= getLength(l2)) { ListNode *p = l1, *q = l2; int len = getLength(l1) - getLength(l2); while (len != 0) { v.push_back(p->val); p = p->next; --len; } while (p != NULL&&q != NULL) { v.push_back(p->val + q->val); p = p->next; q = q->next; } } else { ListNode *p = l1, *q = l2; int len = getLength(l2) - getLength(l1); while (len != 0) { v.push_back(q->val); q = q->next; --len; } while (p != NULL&&q != NULL) { v.push_back(p->val + q->val); p = p->next; q = q->next; } } for (int i = v.size() - 1; i > 0; --i) { if (v[i] >= 10) { v[i] -= 10; v[i - 1] += 1; } } if (v[0] >= 10) { v[0] -= 10; v.insert(v.begin(), 1); } ListNode *node = new ListNode(-1); ListNode *l = node; for (auto c : v) { l->next= new ListNode(c); l = l->next; } return node->next; } int getLength(ListNode *head) { int num = 0; ListNode *p = head; while (p != NULL) { num++; p = p->next; } return num; } }; #endif
相关文章推荐
- lintcode-221-链表求和 II
- LintCode-[中等] 221. 链表求和 II
- lintcode(221)链表求和 II
- LintCode-----36.翻转链表 II
- 链表求和-LintCode
- LintCode_167_链表求和
- [Lintcode]Remove Duplicates from Sorted List II 删除排序链表中的重复数字 II
- LintCode删除排序链表中的重复数字 II - Java
- LintCode(M)删除排序链表中的重复数字 II
- 221 - 链表求和 II
- LintCode【简单】167. 链表求和 。代码及思路
- [lintcode]36. 翻转链表 II
- LintCode_167_链表求和
- 区间求和 II -LintCode
- 【LintCode-167】链表求和(Java实现)
- LintCode-链表求和
- [LintCode]167.链表求和
- lintcode ----链表求和
- 删除排序链表中的重复数字 II -LintCode
- lintcode-167-链表求和