【发布时间】:2011-09-25 00:30:23
【问题描述】:
我正在用 C++ 编写一个链表模板类,作为我自己的练习,以帮助我重新开始 C++ 编程。我有以下类定义:
template <typename T>
class List
{
public:
List();
~List();
void append(T data);
void display();
int count();
private:
struct Node
{
T data;
Node *next;
} *head;
};
我有两个版本的 append 方法——一个有效,一个无效。我无法弄清楚在执行的操作方面有什么区别,以及为什么第二个不起作用。这是一个有效的方法:
template <typename T>
void List<T>::append(T data)
{
if (head == NULL)
{
head = new Node;
head->data = data;
head->next = NULL;
}
else
{
Node *p = head, *q;
while (p != NULL)
{
q = p;
p = p->next;
}
p = new Node;
p->data = data;
p->next = NULL;
q->next = p;
}
}
这是一个似乎并没有真正将任何元素添加到列表中的元素:
template <typename T>
void List<T>::append(T data)
{
Node *p = head, *q = head;
while (p != NULL)
{
q = p;
p = p->next;
}
p = new Node;
p->data = data;
p->next = NULL;
if (q != NULL)
{
q->next = p;
}
}
关于为什么第二个版本不添加任何元素的任何想法?我一直在尝试使用类型 T 作为 int。
附:这两个版本在编译期间和运行时都没有给出任何错误或警告。
【问题讨论】:
-
你也可以保留一个指向列表最后一个元素的指针(例如tail),这样可以更容易地追加。
标签: c++ templates linked-list