【发布时间】:2014-10-29 18:44:41
【问题描述】:
这是我在 C++ 中实现列表的程序。我输入元素直到 0。程序正确显示了第一个元素,但第二个元素是错误的。我可能在第二种情况下犯了错误
if (p -> next == first) {
secondElement = first -> data;
}
。你能说它有什么问题吗。谢谢
#include "stdafx.h"
#include "iostream"
using namespace std;
struct Node {
int data;
Node *next;
};
int firstElement;
int secondElement;
int main()
{
Node *first = 0;
Node *p;
cout << "Enter a list" << endl;
int i;
while (true) {
cin >> i;
if (i == 0) break;
p = new Node;
p -> data = i;
p -> next = first;
if (first == 0) {
first = p;
firstElement = first -> data;
}
if (p -> next == first) {
secondElement = first -> data;
}
first = p;
}
cout << "First element is: " << firstElement << endl;
cout << "Second element is: " << secondElement << endl;
cout << "List: ";
p = first;
while (p) {
cout << p -> data << " ";
p = p -> next;
}
cout << endl;
return 0;
}
【问题讨论】:
-
为什么不直接使用 std::list ?
-
这是我的任务。我必须手动完成
-
我相信它打印的第一个和第二个元素相同。
-
您是否想采取后进先出的行为?
-
一些通用的cmets:不要使用
new/delete,改用std::unique_ptr等智能指针。我看到你已经在回避delete,但这只是意味着你在泄漏。不要将0用作空指针常量。请改用nullptr。在实际程序中,应该像cin >> i这样的输入操作成功并且故障得到适当处理。应该首选使用"\n"而不是endl。endl做了一些通常不需要的额外操作。包括像#include <iostream>这样的iostream,而不是使用引号。