为什么两个指向相同链接的两个指针在这里表现不同

Why do two pointer pointing to the same link behave differently here?

本文关键字:两个 在这里 指针 为什么 链接      更新时间:2023-10-16
void fillList(ListNode *&emp,int a[],int n){
    ListNode *e=new ListNode(a[0]);
    emp=e;
    for(int i=1;i<n;++i){
        e=e->next;
        e=new ListNode(a[i]);
    }
}
void showList(ListNode *l){
    while(l){
        cout<<l->val<<' ';
        l=l->next;
    }
}

我在这里写了两个功能,一个用数组填充一个空链接,另一个用于输出链接。但是,当我输出链接时,它只是数组中的第一个元素。我做错了什么? 该程序如下列出。非常感谢。

#include<iostream>
using namespace std;
struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
  };
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode *p1=l1, *p2=l2, *n1, *n2;
        while(p1&&p2){
            p1=p1->next;
            p2=p2->next;
        }
        if(p2){n1=l2;n2=l1;}else{n1=l1;n2=l2;}
        bool b=0;
        while(l1){
            if((l1->val+=l2->val)>=10){l1->val-=10;b=1;}
            l1=l1->next;
            l2=l2->next;
            if(b)if(l1)l1->val++;else l1=new ListNode(1);
        }
        return n1;
    }
};
void fillList(ListNode *&emp,int a[],int n){
    ListNode *e=new ListNode(a[0]);
    emp=e;
    for(int i=1;i<n;++i){
        e=e->next;
        e=new ListNode(a[i]);
    }
}
void showList(ListNode *l){
    while(l){
        cout<<l->val<<' ';
        l=l->next;
    }
}
 int main(){
    Solution sol;
    ListNode *l1=0,*l2=0;
    int a[]={2,4,3},b[]={5,6,4};
    fillList(l1,a,3);
    fillList(l2,b,3);
    //cout<<l1->val<<endl;
    showList(l1);
    showList(l2);
    showList(sol.addTwoNumbers(l1,l2));
 }

首先,我真的要感谢您的问题,非常完整。

实际上问题在这里

for(int i=1;i<n;++i){
    e=e->next;
    e=new ListNode(a[i]);
}

您应该将其更改为以下代码为连接所有新创建的节点

for(int i=1;i<n;++i){
    e->next = new ListNode(a[i]);
    e=e->next;
}