LeetCode之2_Add Two Numbers

題目原文:

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;
    }
};


 

 

 

發佈了61 篇原創文章 · 獲贊 20 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章