首页 > 代码库 > Leetcode Add two numbers

Leetcode Add two numbers

#include <iostream>
using namespace std;
 
 struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
 };
 
class Solution {
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
		
		ListNode *l3 = NULL;
		ListNode *l3Tail = NULL;
		int sum = 0;
		int carryFlag = 0;
		int current = 0;
		
		if (l1 == NULL) {
			return l2;
		}
		if (l2 == NULL) {
			return l1;
		}
		
		while (l1 != NULL || l2 != NULL) {
			sum = carryFlag;
			if (l1 != NULL) {
				sum = sum + l1->val;
				l1 = l1->next;
			}
			if (l2 != NULL) {
				sum = sum + l2->val;
				l2 = l2->next;
			}
			carryFlag = sum / 10;
			current = sum % 10;
			
			ListNode * temp = new ListNode(current);
			temp->next = NULL;
			if(l3 == NULL) {
				l3 = temp;
				l3Tail = temp;
			} else {
				l3Tail->next = temp;
				l3Tail = l3Tail->next;
			}			
		}
		
		if (carryFlag != 0) {
			ListNode *temp = new ListNode(carryFlag);
			temp->next = NULL;
			l3Tail->next = temp;
			l3Tail = l3Tail->next;	
		}
		
		return l3;
    }
    
    ListNode *initLinkList(int array[], int length) {
		ListNode *head = NULL;
		ListNode *tail = NULL; 
		int i =0 ;
		for(i = 0; i < length; i++) {
			ListNode * temp = new ListNode(array[i]);
		//	temp->val = array[i];
		//	temp->next = NULL;
			if(i == 0) {
				head = temp;
				tail = temp;
			} else {
				tail->next = temp;
				tail = tail -> next;
			}
		//	cout<<"tail->val:"<<tail->val<<endl;
		}
		
		return head;
    }
    
    void print(ListNode *link) {
    	ListNode *tail = NULL;
    	tail = link;
		while(tail){			
    		cout<<tail->val;
			if (tail->next) {
				cout<<"->";
			}
			tail = tail->next;	
    	}
    	cout<<endl;
    }

};

int main(){
	Solution solution;
	
	int array1[3]={2, 4, 3};
	int array2[4]={5, 6, 7,8};
//	ListNode *L1;
//	ListNode *L2;
	ListNode *L1 = solution.initLinkList(array1, 3);
	ListNode *L2 = solution.initLinkList(array2, 4);
	
	solution.print(L1);
	solution.print(L2);
	
	ListNode *L3 = solution.addTwoNumbers(L1, L2);
	solution.print(L3);
	return 1; 

}



   

Leetcode Add two numbers