链接列表帮助C ++

时间:2017-10-05 22:04:30

标签: c++ c++11 linked-list

我在将C ++放入并显示到链表中时遇到了麻烦。我对链接列表有很多麻烦

这是我的代码。它只显示第一个数字。 (应显示19 21 17 22 33)

#include <iostream>
using namespace std;

struct node {
    int age;
    node *next;
};

void display(node *t)
{
    node *temp = t;
    cout << temp->age << " ";
}

int main()
{
    int Age[5] = { 19, 21, 17, 22, 33 };

    node* List = new node;
    List = NULL;
    node* temp2 = List;

    while (temp2 != NULL)
    {
        temp2 = temp2->next;
        node* List = new node;
        List = NULL;
        node* temp2 = List;
    }

    for (int i = 0; i < 5; i++)
    {
        temp2 = new node;
        temp2 -> age = Age[i];
        temp2 -> next = NULL;

        if (List == NULL) 
            List = temp2;
    }

    display(List);

    system("PAUSE");
    return 0;
}

2 个答案:

答案 0 :(得分:0)

这里有很多事情要发生。我建议您查看一些教程,以帮助巩固您对指针和链接列表的理解。

要回答您的问题,请让我们逐步了解正在发生的事情:

main函数中,您动态分配node对象,并List指向此对象。然后,您将List设置为NULL。将node指针temp2初始化为List时,temp2也会指向NULL

由于temp2 = NULL,您可以跳过以下while循环。

for循环的第一次迭代中,您将temp2重新分配给新创建的对象,然后将age的{​​{1}}设置为node 1}}。当我们到达Age[0]语句if时,我们输入条件语句并将List = NULL设置为List temp2

对于temp2->age = Age[0]循环的每次额外迭代,for不再等于List,因此您再也不会输入NULL语句。 if仍指向List node

当你进入你的显示功能时,假设它被写入循环链表,你的age = Age[0]指针是一个列表,其中一个节点List。假设您的链接列表包含多个有效节点,则age = 19函数不会迭代它们。

答案 1 :(得分:0)

以下面的代码为例。请注意,您必须在程序结束时删除所有已创建的节点,以避免内存泄漏。

#include <iostream>
#include <cstddef>

using namespace std;

struct node {
    int age;
    node* next;
};

void display(node* list) {
    while (list != NULL) {
        cout << list->age << ' ';
        list = list->next;
    }
}

node* create(int age) {
    node* t = new node;
    t->age = age;
    t->next = NULL;
    return t;
}

void add(node* list, node* t) {
    while (list->next != NULL) {
        list = list->next;
    }
    list->next = t;
}

void release(node* list) {
    while (list != NULL) {
        node* t = list;
        list = list->next;
        delete t;
    }
}

int main() {
    int arr[5] = { 19, 21, 17, 22, 33 };

    node* list = create(arr[0]);
    for (int i = 1; i < 5; i++) {
        node* t = create(arr[i]);
        add(list, t);
    }

    display(list);

    release(list);

    system("PAUSE");
    return 0;
}