leetcode-Add Two Numbers (2014.2.27)
2014-04-19 23:10
399 查看
细节很多,用了相当长的时间。代码长度很长,不够简洁。
/**
* 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(l2==NULL) return l1;
if(l1==NULL) return l2;
ListNode *p=NULL,*q=NULL;
int m=0;//进位值
p=l1,q=l2;
int flag=0;//标记哪条链表更长
while(p!=NULL||q!=NULL){
if(p!=NULL&&q!=NULL){
int n=p->val+q->val;
p->val=(n+m)%10;
q->val=p->val;
if(n+m>=10) m=1;
else{
m=0;
}
p=p->next;
q=q->next;
}else if(p!=NULL&&q==NULL){
p->val+=m;
if(p->val==10){
p->val=0;
m=1;
} else{
m=0;
}
p=p->next;
}else if(p==NULL&&q!=NULL){
flag=1;
q->val+=m;
if(q->val==10){
q->val=0;
m=1;
} else{
m=0;
}
q=q->next;
}
}
if(m==1){
if(flag==0){
p=l1;
while(p->next!=NULL){
p=p->next;
}
ListNode *g=new ListNode(1);
p->next=g;
g->next=NULL;
return l1;
}else{
p=l2;
while(p->next!=NULL){
p=p->next;
}
ListNode *g=new ListNode(1);
p->next=g;
g->next=NULL;
return l2;
}
}
if(flag==0){
return l1;
}else {
return l2;
}
}
};
/**
* 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(l2==NULL) return l1;
if(l1==NULL) return l2;
ListNode *p=NULL,*q=NULL;
int m=0;//进位值
p=l1,q=l2;
int flag=0;//标记哪条链表更长
while(p!=NULL||q!=NULL){
if(p!=NULL&&q!=NULL){
int n=p->val+q->val;
p->val=(n+m)%10;
q->val=p->val;
if(n+m>=10) m=1;
else{
m=0;
}
p=p->next;
q=q->next;
}else if(p!=NULL&&q==NULL){
p->val+=m;
if(p->val==10){
p->val=0;
m=1;
} else{
m=0;
}
p=p->next;
}else if(p==NULL&&q!=NULL){
flag=1;
q->val+=m;
if(q->val==10){
q->val=0;
m=1;
} else{
m=0;
}
q=q->next;
}
}
if(m==1){
if(flag==0){
p=l1;
while(p->next!=NULL){
p=p->next;
}
ListNode *g=new ListNode(1);
p->next=g;
g->next=NULL;
return l1;
}else{
p=l2;
while(p->next!=NULL){
p=p->next;
}
ListNode *g=new ListNode(1);
p->next=g;
g->next=NULL;
return l2;
}
}
if(flag==0){
return l1;
}else {
return l2;
}
}
};
相关文章推荐
- LeetCode:M-2. Add Two Numbers
- Leetcode练习-两个数字相加(Add two numbers)
- LeetCode - 2. Add Two Numbers
- 【Leetcode】2. Add Two Numbers
- Leetcode [Add Two Numbers]
- leetCode | Add Two Numbers
- leetcode之AddTwoNumbers
- 【LeetCode】Add Two Numbers
- leetcode Add Two Numbers
- LeetCode(2)--Add Two Numbers
- LeetCode 002 Add Two Numbers
- 【leetcode】 Add Two Numbers
- [LeetCode] Add Two Numbers
- LeetCode 2.Add Two Numbers
- leetcode---add-two-numbers---链表
- LeetCode_Add Two Numbers
- leetcode2 Add Two Numbers
- leetcode 2. Add Two Numbers
- LeetCode 2 Add Two Numbers 模拟,读题 难度:0
- LeetCode 2:Add Two Numbers