【问题标题】:Infinite print list function无限打印列表功能
【发布时间】: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 应该做什么?我们可以从代码中看到它做了什么,但如果它是错误的,我们怎么知道它应该做什么才能提出建议呢? qpr 应该代表什么?
  • 为什么要将Node *p 传递给LList 类的insert 方法,它应该已经在宣传自己的head 指针以在内部管理其链表,这有点神秘。与print 类似,它应该只引用LListhead。这几乎看起来像是有人采用了基于 C 的链表实现并将其填充到 LList 类中,并保持所有函数签名原样。

标签: c++ list printing infinite


【解决方案1】:

您的构造函数设置在当前项旁边,因此 next 永远不会指向 nullptr。因此,next 永远不会为空。修改你的构造函数,我认为你会接近行为。

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 2023-02-24
    • 2020-07-25
    • 2021-06-24
    • 2017-03-12
    • 1970-01-01
    相关资源
    最近更新 更多