当我调用显示函数时,链表的第一个元素被打印两次。我不知道代码有什么问题。请帮我弄清楚。 代码如下:
#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
看看事情,如果你还有其他问题,请告诉我。