请问为什么我返回的l1或者l2,链表中节点的val并没有改变?我不是用p指针对链表进行操作了吗?谢谢各位!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int count1=0;int count2=0;
struct ListNode *p1=l1;struct ListNode *p2=l2;
while(p1!=NULL){
p1=p1->next;
count1++;
}
while(p2!=NULL){
p2=p2->next;
count2++;
}
if(count1>=count2){
while(p1!=NULL&&p2!=NULL){
if(p1->val+p2->val>=10){
p1->val=(p1->val+p2->val)-10;
p1=p1->next;
p1->val++;
p2=p2->next;
}
else{
p1->val=p1->val+p2->val;
p1=p1->next;
p2=p2->next;
}
}
return l1;
}
if(count1<count2){
while(p1!=NULL&&p2!=NULL){
if(p1->val+p2->val>=10){
p2->val=(p1->val+p2->val)-10;
p2=p2->next;
p2->val++;
p1=p1->next;
}
else{
p2->val=p1->val+p2->val;
p1=p1->next;
p2=p2->next;
}
}
return l2;
}
return 0;
}
应该将p1和p2重新指向l1和l2,在while循环之前加上重新将p1和p2指向l1和l2的代码。
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int count1=0;
int count2=0;
struct ListNode *p1=l1;
struct ListNode *p2=l2;
while(p1!=NULL){
p1=p1->next;
count1++;
}
while(p2!=NULL){
p2=p2->next;
count2++;
}
p1 = l1; // 重新指向l1
p2 = l2; // 重新指向l2
if(count1>=count2){
while(p1!=NULL&&p2!=NULL){
if(p1->val+p2->val>=10){
p1->val=(p1->val+p2->val)-10;
p1=p1->next;
p1->val++;
p2=p2->next;
}
else{
p1->val=p1->val+p2->val;
p1=p1->next;
p2=p2->next;
}
}
return l1;
}
if(count1<count2){
while(p1!=NULL&&p2!=NULL){
if(p1->val+p2->val>=10){
p2->val=(p1->val+p2->val)-10;
p2=p2->next;
p2->val++;
p1=p1->next;
}
else{
p2->val=p1->val+p2->val;
p1=p1->next;
p2=p2->next;
}
}
return l2;
}
return NULL;
}