2012-10-29 254 views
2

我正在創建一個簡單的問題。我嘗試將學生添加到一個列表中,然後將其分成兩個列表。我創建了一個將節點添加到列表的通用方法,但它似乎不起作用。這是我試過的。我做錯了什麼?將項目添加到列表問題

int main() 
{ 
    for(int i=0;i<NR_STUDENTS;i++) 
    { 
     Student *studToAdd=new Student; 
     cout<<"Student #"<<i<<endl; 
     cout<<"Name:"; 
     cin>>studToAdd->name; 
     cout<<"Grade:"; 
     cin>>studToAdd->grade; 
     Add(studToAdd); 
    } 
    Split(); 
    Print(); 
} 

#include "students.h" 

Node *allFirstNode; 
Node *admitedFirstNode; 
Node * rejectedFirstNode; 


void AddNodeToList(Node *firstNode, Student *studToAdd) 
{ 
    Node *nodeToAdd=new Node; 
    nodeToAdd->student=studToAdd; 
    nodeToAdd->next=NULL; 

    if(firstNode==NULL) 
    { 
     firstNode=nodeToAdd; 
    } 
    else 
    { 
     Node *temp; 
     temp=firstNode; 
     while(temp->next != NULL) 
     { 
      temp=temp->next; 
     } 
     temp->next=nodeToAdd; 
    } 
} 
void addStudent(Student *studentToAdd) 
{ 
    AddNodeToList(allFirstNode,studentToAdd); 
} 

void split() 
{ 
    Node *temp=allFirstNode; 
    while(temp->next != NULL) 
    { 
     Student *currentStud=temp->student; 
     if(currentStud->grade < GR) 
     { 
      AddNodeToList(rejectedFirstNode,currentStud); 
     } 
     else  
     { 
      AddNodeToList(admitedFirstNode,currentStud); 
     } 
    } 
} 


void PrintList(Node *first) 
{ 
    Node *temp=first; 
    while(temp!=0) 
    { 
     cout<<temp->student->name<<":"<<temp->student->grade<<endl; 
     temp=temp->next; 
    } 
} 
void Print() 
{ 
    PrintList(admitedFirstNode); 
    PrintList(rejectedFirstNode); 
} 
    #include <iostream> 
#include <string> 

using namespace std; 

const int NR_STUDENTS=2; 
const double GR=5.0; 

struct Student 
{ 
    string name; 
    double grade; 
}; 

struct Node 
{ 
    Student *student; 
    Node *next; 
}; 

extern Node *allFirstNode; 
extern Node *admitedFirstNode; 
extern Node * rejectedFirstNode; 

void addStudent(Student *studentToAdd); 
void split(); 
void sort(); 
void print(Node *firsNode); 
+0

什麼的代碼表現出的問題最小的完整片段?你期望發生什麼,實際發生了什麼? –

+0

我想在列表中添加學生(allFirstNode)。當我添加節點它成爲nodeToAdd,但是當我嘗試添加另一個列表是空的,先前添加的節點已經消失 – laura

回答

2

您需要通過引用調用(你不需要改變任何東西):

void AddNodeToList(Node* &firstNode, Student *studToAdd)