插入链接列表后,值头值是输入的最后一个值。为什么?

时间:2012-04-11 21:35:55

标签: c++ generics linked-list

我有像这样的通用链表结构

template <typename E, typename F>
struct node
{
public:
    E data;
    node<E, F>* next;
    node<F, F>* down;
};

和这样的一个类

class LetterList
{
private:
    node <char, Dictionary> *head;
public:
    LetterList(){head = NULL;};
    void createLetterList();
    void print();
};

“node * head”中的词典是另一个阶级; 我想要做的是使用LetterList类将所有字母插入到链表中。这是我的代码......

node <char, Dictionary> *p = new node <char, Dictionary>;
    p->data = 'A';
    char ch;
    if (head == NULL)
        {
            p->next = NULL;
            head = p;
        }

    node <char, Dictionary> *q = head;

    while (true)
    {
        for (int i=66; i<91;i++)
        {
            ch = char (i);
            p->data = ch;
            q ->next = p;
            if (i == 90)
            {
                q->next = NULL;
            }
            else
                q = q->next;
        }
        break;
    }
}

执行此代码后,链表的头部为'Z',但不应该是'A'?请告诉我我在这方面做错了什么。

2 个答案:

答案 0 :(得分:0)

您只分配一个节点。如果您希望列表中的节点“A”到“Z”,则需要随时分配新节点以将其添加到列表中。

答案 1 :(得分:0)

如jcopenha所述,您不是动态创建新节点。您只需将“q”指向头部并继续使用A,B,C等更新其数据,依此类推,直到Z.更新代码后应该有效:

while (true)
{
    node <char, Dictionary> *temp;
    temp = NULL;
    p -> next = temp;
    for (int i=66; i<91;i++)
    {
        ch = char (i);
        node <char, Dictionary> *z = new node <char, Dictionary>;
        z->data = ch;
        temp = z;
        temp->next = NULL;
        temp = temp->next;       
    }
    break;
}