尾巴指向最后一个节点?

时间:2014-02-26 07:28:43

标签: c++

void IntList::push_front(int value){
    IntNode *holder = new IntNode(value);
    holder -> next = head;
    head = holder;
    if(head == 0){
        tail = head;
    }
    tail = holder;
}

标题

#ifndef INTLIST_H
#define INTLIST_H

struct IntNode{
    int data;
    IntNode *next;
    IntNode(int data) : data(data), next(0) {}
};

class IntList{
private:
    IntNode *head;
    IntNode *tail;
public:
    void push_front(int value);
};

#endif

如何让尾巴指向最后一个尾节点?我有if语句,如果列表为空则将其设置为0。

1 个答案:

答案 0 :(得分:0)

head = holder;
if(head == 0){
    tail = head;
}

上面的步骤顺序错误:你正在设置head to holder(永远不会为0)因为如果内存分配失败你会得到一个异常,如果它有效,你会得到指向分配节点),然后测试head是否仍然等于0。

你可以改变他们的订单,但恕我直言,直接测试尾巴更清洁:

head = holder;
if (tail == nullptr)
    tail = head;

在pre-C ++ 11编译器上,您可能没有nullptr - 只需使用NULL或0或更改为if (!tail)