您的位置:首页 > 编程语言 > C语言/C++

LeetCode之2_Add Two Numbers

2016-04-04 17:58 369 查看
题目原文:

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

Subscribe to see which companies asked this question

 

分析:输入两个整数序列,将其对应位置上的数字相加(从左到右),注意有进位的情况(原位置只保留其个位数,十位数向右进位),两个序列长度不等的情况和进位在最后新增一个位置的情况。

          

代码:

 

class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if (l1 == NULL && l2 == NULL)
{
return NULL;
}

int nAddOverFlow = 0; //相加是否有进位
int nTempAdd = 0;
int nHeadFlag = 0;
ListNode *pRetHead = NULL;
ListNode *pTail = NULL;
ListNode *pTempPtr = NULL;

while (l1!= NULL || l2 != NULL)
{
//若还有节点没有加完,则继续相加,且考虑进位的情况
nTempAdd = 0;
nTempAdd += nAddOverFlow;
if (l1!= NULL)
{
nTempAdd += l1->val;
l1 = l1->next;
}
if (l2!= NULL)
{
nTempAdd += l2->val;
l2 = l2->next;
}

nAddOverFlow = nTempAdd/10;
nTempAdd = nTempAdd%10;

pTempPtr = (ListNode*)malloc(sizeof(ListNode));
pTempPtr->next = NULL;
if (nHeadFlag == 0)
{
nHeadFlag = 1;
pRetHead = pTempPtr;
pTail = pTempPtr;
}
else
{
pTail->next = pTempPtr;
pTail = pTempPtr;
}
pTempPtr->val = nTempAdd;

}

if (nAddOverFlow > 0)
{
pTempPtr = (ListNode*)malloc(sizeof(ListNode));
pTempPtr->next = NULL;
pTail->next = pTempPtr;
pTail = pTempPtr;
pTempPtr->val = nAddOverFlow;
}

return pRetHead;
}
};


 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode c++ Two Sum