2016-11-23 79 views
-2
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)); 
} 
+0

当您通过程序加强与调试器,一次一行,你做了什么观察?这段代码中的一个明显错误应该是在你的调试器中可观察到的。 –

+0

我看到我不能cout emp-> next-> val,因为emp-> next是空的。我不知道为什么。 –

回答

0

首先,我真的要感谢你的问题,非常齐全。

其实问题就出在这里

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; 
} 
+0

非常感谢你^ ^ –

相关问题