題目原文:
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;
}
};