C ++链接列表打印

时间:2015-10-21 22:40:38

标签: c++ null linked-list

以下是在正向打印LinkedList的函数的代码。

void DLinkedList::printForwards(int age)
{
DNode * current;
current = header->next;
while (current != NULL)
{
    if (current->elem->getAge() <= age) {
        cout << current->elem->getName() << ", ";
    }
    current = current->next;
}
cout << endl;
}

这是类DNode

typedef Person* Elem;
class DNode {                                 // doubly linked list node
private:
    Elem elem;                                  // node element value
    DNode* prev;                            // previous node in list
    DNode* next;                                // next node in list
    friend class DLinkedList;                   // allow DLinkedList access
};

这是班级人员

class Person {                                 
public:
Person(int age, string first, string last){
    setAge(age);
    setFirstname(first);
    setLastName(last);
}
void setAge(int age){
    this->age = age;
}
void setFirstname(string first){
    firstName = first;
}
void setLastName(string last){
    lastname = last;
}

int getAge(){
    return age;
}

string getName(){
    return firstName + " " + lastname;
}
private:
    string firstName, lastname;
    int age;
};

这是我的主要

int main(){    

DLinkedList list;
Person * ryan= new Person(19, "Ryan", "Temple");
list.addFront(ryan);
list.printForwards(100);
}

这行代码给程序带来了麻烦。

if (current->elem->getAge() <= age)

elem的值设置为NULL。 当初始化电流时,它会指向正确的节点。 但是,在if语句中访问current会将其值设置为NULL。

有人可以帮帮我吗?

编辑: 这是addFront函数

void DLinkedList::add(DNode* v, Elem& e) {
DNode* u = new DNode;
u->elem = e;            // create a new node for e
u->next = v;                                // link u in between v
u->prev = v->prev;                          // ...and v->prev
v->prev->next = u;
v->prev = u;
}

添加前面

  void DLinkedList::addFront(Elem& e)     // add to front of list
{
   add(header->next, e);
}

1 个答案:

答案 0 :(得分:0)

编辑:

我的回答不正确。还有其他事情正在发生但没有更多的源代码,我们只能推测。由于这是接受的答案,我无法删除它。因此,我删除了原始内容,使其不会混淆可能偶然发现此问题的其他人。