找到列表中的第一个元素。 C ++

时间:2014-10-25 14:23:58

标签: c++ algorithm list

这是我在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;
}

3 个答案:

答案 0 :(得分:2)

您的程序在保留列表的初始元素时遇到问题:您将 last 元素分配给名为first的变量的代码,因此您的第二个循环将以一旦它开始。

您需要更改分配first的逻辑:例如,不是无条件地分配它,您只能在0时分配它:

if (first == 0) {
    first = p;
}

除了修复此问题外,您还应添加代码以释放使用new分配的对象。使用delete释放列表中的节点。这可以用与第二个循环相同的方式完成:

p = first;
while (p) {
    Node* tmp = p;
    p = p -> next;
    delete tmp;
}

答案 1 :(得分:1)

您创建的是堆栈(LIFO)。您正在向其顶部添加新元素,因此当您遍历数据结构时,first实际上指向最后添加的元素。

因此,您可以遍历它直到元素的next为NULL - 这是您实际的第一个元素。

或者您可以更改程序以使用不同的数据结构,在这里您可以向尾部添加元素,而不是向头部添加元素,或者在指向第一个元素的位置添加元素。

答案 2 :(得分:0)

只需访问您的链接列表,直到您点击下一个指针为0的节点。 这是第一个节点。打印它的价值,你就完成了。 在最后一个节点上保留一个指针,以便能够遍历链表。 如果你经常需要第一个节点,请为它保留一个额外的指针。