2016-11-23 81 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

非常感謝你^ ^ –

相關問題