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



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

#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
实际输出:eetrwl

你的代码有两个问题。首先是围绕您在insert()中的else陈述的缺失{...}。为了使所需的代码仅适用于else情况,您需要用大括号将整个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

看看事情,如果你还有其他问题,请告诉我。

相关内容

  • 没有找到相关文章

最新更新