[LeetCode]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

solutions:

從最低位相加,保存一個進位即可

/**
 * 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) {
       if(l1 == NULL && l2 == NULL) {
		   return NULL;
	   } 
	   else if(l1 == NULL) {
		   return l2;
	   }
	   else if(l2 == NULL) {
		   return l1;
	   }
	   int jinWei=0;
	//   ListNode *ret=new ListNode(0);
	   ListNode *r=NULL, *ret=NULL, *prev=NULL;
	   ListNode *i1=l1, *i2=l2;
	   for(i1=l1, i2=l2; i1!=NULL&&i2!=NULL; i1=i1->next, i2=i2->next) {		   
		   r=new ListNode(0);
		   if(ret == NULL) {
			   ret = r;
			   prev=r;
		   }else{
			   prev->next=r;
			   prev=r;
		   }
		   int val = i1->val + i2->val +jinWei;
		   if(val < 10) {
			   r->val = val;
			   jinWei = 0;
		   }else{
			   jinWei = 1;
			   r->val = val-10;
		   }
	   }
	   if(i2 != NULL) {
		   i1 = i2;
	   }
	   while(i1 != NULL) {
		   r=new ListNode(0);
		   if(ret == NULL) {
			   ret = r;
			   prev=r;
		   }else{
			   prev->next=r;
			   prev=r;
		   }
		   int val=i1->val+jinWei;
		   if(val<10) {
			   r->val = val;
			   jinWei = 0;
		   }else{
			   jinWei=1;
			   r->val = val-10;
		   }
		   i1=i1->next;
	   }
	   if(jinWei == 1) {
		   r = new ListNode(1);
		   prev->next=r;
	   }
	   return ret;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章