题目:
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
思路:
方法一:将两个链表翻转,将两个链表依次相加(进位),最后得到的结果再翻转输出。
通过代码:
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if(l1==NULL)return l2;
else if(l2==NULL)return l1;
ListNode* p1 = reverseList(l1);
ListNode* p2 = reverseList(l2);
ListNode* new_node = NULL;
int up=0;
int temp=0;
int digit=0;
ListNode* pre = new ListNode(0);
ListNode* m = pre;
while(p1!=NULL||p2!=NULL){
if(p1==NULL){
temp=p2->val;
p2 = p2->next;
}
else if(p2==NULL){
temp=p1->val;
p1 = p1->next;
}
else {
temp = p1->val+p2->val;
p1=p1->next;
p2=p2->next;
}
digit = (up+temp)%10;
up = (up+temp)/10; //进位
new_node = new ListNode(digit);
m->next = new_node;
m=m->next;
}
if(up>0){
new_node = new ListNode(up);
m->next = new_node;
m=m->next;
}
m->next = NULL;
return reverseList(pre->next);
}
ListNode* reverseList(ListNode* head){
if(head==NULL||head->next==NULL)return head;
ListNode* pre_node = new ListNode(0);
ListNode* cur = head;
ListNode* temp = NULL;
while(cur!=NULL){
temp = cur;
cur = cur->next;
temp ->next = pre_node->next;
pre_node->next = temp;
}
return pre_node->next;
}
};
方法二:(不翻转链表)待续..