查找列表中的第一个元素.C++
Find the first element in list. C++
这是我在C++中实现列表的程序。并希望打印其中的第一个元素。我写入元素,直到达到0
你能告诉我怎么做吗?谢谢
#include "stdafx.h"
#include "iostream"
using namespace std;
struct Node {
int data;
Node *next;
};
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 ;
first = p;
}
cout << "List: ";
p = first;
while (p) {
cout << p -> data;
p = p -> next;
}
cout << endl;
return 0;
}
您的程序在保留列表的初始元素时遇到问题:您的代码将最后一个元素分配给名为first
的变量,因此第二个循环一开始就会结束。
您需要更改分配first
的逻辑:例如,您可以仅在0
:的情况下分配它,而不是无条件地分配它
if (first == 0) {
first = p;
}
除了修复此问题外,还应该添加代码来释放使用new
分配的对象。使用delete
释放列表中的节点。这可以用与第二个循环相同的方式完成:
p = first;
while (p) {
Node* tmp = p;
p = p -> next;
delete tmp;
}
您创建的是一个堆栈(LIFO)。您正在向其顶部添加新元素,因此当您遍历数据结构时,first
实际上指向最后添加的元素。
因此,您可以遍历它,直到元素的next
为NULL——这是您实际的第一个元素。
或者,您可以更改程序以使用不同的数据结构,将元素添加到尾部而不是头部,或者将指针保留到第一个元素。
只需访问您的链表,直到您找到下一个指针为0的节点。这是第一个节点。打印它的价值,你就完成了。将指针放在最后一个节点上,以便能够遍历链表。如果您经常需要第一个节点,请为其保留一个额外的指针。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素