2013-04-20 48 views
0
#include "PersonList.h" 
#include <iostream> 
#include <string> 
using namespace std; 

PersonList::PersonList() 
{ 
    head=NULL; //Head is a PersonRec* 
} 
struct PersonRec 
{ 
    string aName; 
    int aBribe; 
    PersonRec* link; 
}; 
void PersonList::AddToList() 
{ 

    //string a; 
    //int b; 
    PersonRec* p;     
    p=new PersonRec; 


    p->link=NULL; 
    cout << "\nEnter the person's name: "; 
    cin >> p->aName; 
    cout<< "\nEnter the person's contribution: "; 
    cin >> p->aBribe; 

    if(head==NULL) 
    { 
     cout<<1<<endl; 
     head=p; 
    } 
    else if(head!=NULL)  //The problem is in here. 
    { 
     PersonRec *currPtr=head; 
     bool x=true; 
     while(x==true) 
     { 
      currPtr=currPtr->link;  
      if(currPtr==NULL) 
      { 
       currPtr=p; 
       x=false; 
      } 

     } 
    } 

} 

這是應該輸入一個名稱和一個賄賂成通過動態存儲器分配的鏈接列表,並且輸出根據請求的結果的程序(I只放置在輸入函數在這裏,因爲它是唯一有問題的)。第一個元素輸入和輸出很好,但如果我嘗試輸入第二個元素,則不會輸出。該程序編譯,但是因爲在第一個節點之後添加一個節點對於所有節點是不同的,所以問題必須是我已經評論爲問題的部分。任何幫助,將不勝感激。這是作業,是的,所以任何提示將不勝感激。與動態存儲器分配鏈表程序

+0

請添加用於輸出列表內容的代碼。是什麼讓你認爲問題不在那裏? – 2013-04-20 21:40:17

+0

問題出在那裏,因爲我只是修復它,抱歉沒有更快發佈。 – user2167980 2013-04-20 21:52:40

+0

要添加到列表中,您需要設置'tail-> link = newElement',對吧?但是你似乎沒有那樣做,那麼它是如何添加到列表中的呢? – balki 2013-04-20 21:55:31

回答

0

因爲這是你的功課,我不會給你的代碼,而導致你的解決方案:)

的問題是,您將局部變量currPtr指向新添加而不是將最後一條記錄的link設置爲指向它。

我相信下面可能讓你感到困惑:

a = 7; 
b = a; 
b = 6; 

這裏,a值沒有改變,無論我們在第二條語句複製其b的事實。

類似,在報表

currPtr = currPtr->link; 
currPtr = p; 

下列順序currPtr->鏈接的價值並沒有改變,而不管事實currPtr和鏈接是指針,因爲你改變自己的,而不是他們指向的領域。

+0

謝謝大家,我找到了解決方案! – user2167980 2013-04-20 22:01:07

+0

如果這是解決方案,您可以接受它。如果不是,只是忽略它:) – 2013-04-20 22:02:49