您的位置:首页 > 其它

LeetCode OJ : 2 Add Two Numbers

2015-11-26 22:21 405 查看
Add Two Numbers

Total Accepted: 103820 Total
Submissions: 487934 Difficulty: Medium

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

/**
* 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 *ListSum = NULL, *pNode = NULL, *tail = NULL;
ListNode *pl1 = l1, *pl2 = l2;
int sum, cnt = 0;

while(pl1 != NULL || pl2 != NULL){
if(pl1 == NULL) {                   //此时是因为链表pl2比较长
sum = cnt + pl2->val;
}
else if(pl2 == NULL){               //此时是因为链表pl1比较长
sum = cnt + pl1->val;
}
else if(pl1 != NULL && pl2 != NULL){
sum = cnt + pl1->val + pl2->val;
}

cnt = 0;
if(sum >= 10){
cnt = 1;
sum -= 10;
}

pNode = new struct ListNode(sum);
if(ListSum == NULL){
ListSum = pNode;
tail = pNode;
}
else{
tail->next = pNode;
tail = pNode;
}

if(pl1 != NULL)pl1 = pl1->next;
if(pl2 != NULL)pl2 = pl2->next;
}

if(cnt == 1){                           //考虑到最高位的两位进位
sum = cnt;
pNode = new struct ListNode(sum);
if(ListSum == NULL){
ListSum = pNode;
tail = pNode;
}
else{
tail->next = pNode;
tail = pNode;
}
}

return ListSum;
}
};




如果将结果存放在其中一个比较长的链表上面,效率应该会更高一些;

写了一半,懒得写了,大概思路就是:首先获得两个链表的长度,通过比较两个链表的长度,来分情况;

如果最高位还是有进位的话,就动态分配一个结点来保存进位1;

改天有时间再试试;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: