【发布时间】:2017-01-25 21:42:01
【问题描述】:
我正在用 C++ 实现一个链表类,并且我的打印函数会一直打印。我想知道我的插入函数是否正在将我的链表转换为循环链表,这可以解释为什么我的打印函数不断循环并一遍又一遍地打印列表。
请帮我找出原因!
这是我在 LList.h 文件中的节点定义:
struct Node {
char info;
Node *next;
};
这是我的 LList.cpp 文件中的 insert 和 cons 函数:
Node *LList::cons(char ch, Node *p) {
Node *q = new Node;
q->info = ch;
q->next = p;
return q;
}
________________________________________________
Node *LList::insert(char ch, Node *p) {
if (p == nullptr || ch <= p->info) {
return cons(ch,p);
}
Node *q = p;
Node *r = q->next;
while (r != nullptr && ch > r->info) {
q=r;
r=r->next;
}
q->next = cons(ch,p);
return p;
}
这是我的 LList.cpp 文件中的打印函数:
void LList::print (Node *head) const{
Node *p = head;
while (p != nullptr) {
std::cout << p->info << " ";
p = p->next;
}
}
【问题讨论】:
-
这里的命名有问题。
cons应该做什么?我们可以从代码中看到它做了什么,但如果它是错误的,我们怎么知道它应该做什么才能提出建议呢?q和p和r应该代表什么? -
为什么要将
Node *p传递给LList类的insert方法,它应该已经在宣传自己的head指针以在内部管理其链表,这有点神秘。与print类似,它应该只引用LList的head。这几乎看起来像是有人采用了基于 C 的链表实现并将其填充到LList类中,并保持所有函数签名原样。
标签: c++ list printing infinite