题解 | #两个链表生成相加链表#
两个链表生成相加链表
http://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
/**
Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
/
class Solution {
public:
ListNode * reverselist(ListNode *head)
{ListNode *prev=NULL; while(head) { ListNode *next=head->next; head->next=prev; prev=head; head=next;; } return prev;
}
ListNode* addInList(ListNode* l1, ListNode* l2) {if(l1==NULL) return l2; if(l2==NULL) return l1; ListNode *result; ListNode *p; ListNode *nowre; l1=reverselist(l1); l2=reverselist(l2); result=l1; p=result; int mores=0; while(l1 && l2) { int temp=l1->val+l2->val+mores; int s=temp; if(temp>=10) { temp=temp%10; mores=s/10; } else { mores=0; } if(result!=nullptr) { result->val=temp; } nowre=result; result=result->next; l1=result; l2=l2->next; } if(l1) { while(l1) { int temp=l1->val+mores; int s=temp; if(temp>=10) { temp=temp%10; mores=s/10; } else { mores=0; } result->val=temp; nowre=result; result=result->next; l1=result; } } if(mores>0) { ListNode *node=new ListNode(mores); node->next=NULL; nowre->next=node; } if(l2) { result=l2; nowre->next=result; while(l2) { int temp=l2->val+mores; int s=temp; if(temp>=10) { temp=temp%10; mores=s/10; } else { mores=0; } result->val=temp; nowre=result; result=result->next; l2=result; } } if(mores>0) { ListNode *node=new ListNode(mores); node->next=NULL; nowre->next=node; } return reverselist(p);
}
};