2014-10-25 3 views
-2

это моя программа для реализации списка в C++. И хотите напечатать первый элемент в нем. Я пишу элемент до достижения 0Найдите первый элемент в списке. C++

Можете ли вы показать мне способ сделать это. Благодаря

#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; 
} 

ответ

0

Просто зайдите на ваш связанный список, пока не упретесь в узел, чей следующий указатель равен 0. Это первый узел. Распечатайте его значение, и все готово. Держите указатель на последнем узле, чтобы иметь возможность перемещать связанный список. Если вам нужен этот первый узел часто, держите для него дополнительный указатель.

2

Ваша программа имеет проблемы с сохранением первоначального элемента списка: код, который у вас есть присваивает последний элемент в переменную с именем first, поэтому ваш второй цикл завершится, как только начинается.

Вы должны изменить логику вокруг назначения first: например, вместо назначения его безоговорочно, вы можете назначить его, только если это 0:

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

В дополнение к фиксации этого, следует добавить код для освобождения объектов, которые вы выделяете, с помощью new. Используйте delete, чтобы освободить узлы в списке. Это можно сделать так же, как и ваш второй цикл:

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

Что вы создали - это стек (LIFO). Вы добавляете новые элементы в свою вершину, поэтому first фактически указывает на последний добавленный элемент, когда вы проходите структуру данных.

Итак, вы можете перемещать его до тех пор, пока элементне станет NULL - это ваш фактический первый элемент.

Или вы можете изменить свою программу, чтобы использовать другую структуру данных, в которую вы добавляете элементы в хвост, а не в голову, или где вы держите указатель на первый элемент.

Смежные вопросы