链表修改问题:对于链表修改后,返回了却显示没有修改。

请问为什么我返回的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;
}