查找列表中的第一个元素.C++

Find the first element in list. C++

本文关键字:元素 C++ 第一个 列表 查找      更新时间:2023-10-16

这是我在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的节点。这是第一个节点。打印它的价值,你就完成了。将指针放在最后一个节点上,以便能够遍历链表。如果您经常需要第一个节点,请为其保留一个额外的指针。