链表中的显示功能无法正常工作

时间:2018-10-21 09:40:09

标签: c++ data-structures linked-list

当我调用显示函数时,链接列表的第一个元素被打印两次。我不知道代码有什么问题。请帮我弄清楚。代码如下:

>>> x = Counter({'a':5, 'b':3, 'c':7})
>>> sorted(x.items(), key=lambda k: -k[1])  # Ascending
[('c', 7), ('a', 5), ('b', 3)]

预期输出为:#include <iostream> using namespace std; class node{ public: char data; node *link; }; class linklist{ private: node *start, *temp, *cur; public: linklist(){ start = NULL; } void insert(char x){ if (start == NULL){ start = new node; start->data = x; start->link = NULL; cur = start; } else while (cur->link != NULL){ cur = cur->link; } temp = new node; temp->data = x; temp->link = NULL; cur->link = temp; } void display(){ cur = start; while (cur->link != NULL){ cout << "Value is: " << cur->data << endl; cur = cur->link; } cout << "Value is: " << cur->data << endl; } }; int main(){ linklist obj; obj.insert('e'); obj.insert('t'); obj.insert('r'); obj.insert('w'); obj.insert('l'); obj.display(); system("Pause"); }
实际输出:etrwl

1 个答案:

答案 0 :(得分:0)

您的代码有两个问题。第一个是{...}else语句周围缺少的insert()。为了使所需的代码仅适用于else情况,您需要用括号将 entire else情况包围起来,例如:

        else {
            while (cur->link != NULL) {
                cur = cur->link;
            }
            temp = new node;
            temp->data = x;
            temp->link = NULL;
            cur->link = temp;
        }
    }

第二,您用于display()的条件不正确。您只想在cur != NULL时输出cur->next != NULL 不是的内容(这就是为什么您试图在循环结束后附加一条额外的输出语句以捕获最后一个值的原因)。不要那样做,如果您发现自己试图做这样的事情-您可能做错了。

有了这一更改,您只需:

    void display() {
        cur = start;
        while (cur != NULL) {  
            cout << "Value is: " << cur->data << endl;
            cur = cur->link;
        }
    }

将其放在一起,您将拥有:

#include <iostream>

using namespace std;

class node{
public:
    char data;
    node *link;
};

class linklist{
private:
    node *start, *temp, *cur;
public:
    linklist() {
        start = NULL;
    }

    void insert (char x) {
        if (start == NULL) {
            start = new node;
            start->data = x;
            start->link = NULL;
            cur = start;
        }
        else {
            while (cur->link != NULL) {
                cur = cur->link;
            }
            temp = new node;
            temp->data = x;
            temp->link = NULL;
            cur->link = temp;
        }
    }

    void display() {
        cur = start;
        while (cur != NULL) {  
            cout << "Value is: " << cur->data << endl;
            cur = cur->link;
        }
    }
};

int main (void) {

    linklist obj;

    obj.insert('e');
    obj.insert('t');
    obj.insert('r');
    obj.insert('w');
    obj.insert('l');
    obj.display();

    system("Pause");
}

使用/输出示例

$ ./bin/llinsert
Value is: e
Value is: t
Value is: r
Value is: w
Value is: l

看看是否有其他问题。