c++ - 打印链表元素

标签 c++ list recursion

我写了一个递归添加元素的程序,然后打印出元素。问题是,程序只打印出列表中的第一个元素。我试图解决这个问题,但我不知道问题出在哪里......

#include <iostream>

using namespace std;

struct list
{
    int value;
    list* next;
};

list* addNewElement(list* p_head, int elems)
{
    if (elems >= 1)
    {
        list* p_list = new list;

        cout << "Enter a value: ";
        cin >> p_list->value;

        p_list->next = p_head;

        addNewElement(p_head, elems - 1);

        return p_list;
    }
}

void printList(list* p_head)
{
    list* p_cur = p_head;

    cout << "ELEMENTS: " << endl;

    while (p_cur != NULL)
    {
        cout << p_cur->value;
        p_cur = p_cur->next;
    }

    cout << endl;
}

int main()
{
    list* p_head = NULL;

    int elemNR;

    cout << "Enter how many elements do you want in the list: ";
    cin >> elemNR;

    p_head = addNewElement(p_head, elemNR);

    cout << endl;

    printList(p_head);

    cout << endl;

    cout << "PRESS <ENTER> TO CONTINUE...";

    cin.ignore();
    cin.get();
}

最佳答案

问题是在所有迭代之后您有很多列表对象,其中 next 指针指向 NULL。您应该将 addNewElement 方法修改为如下所示:

list* addNewElement(list* p_head, int elems) {
    if (elems >= 1) {
        list* p_list = new list;

        cout << "Enter a value: ";
        cin >> p_list->value;

        p_list->next = addNewElement(p_head, elems - 1);
        return p_list;
    }
    return p_head;
}

发生了什么变化? p_list->next 指针被设置为下一个列表元素的开头而不是 NULL ;)

编辑:这是工作代码:http://ideone.com/oJ8kX7

关于c++ - 打印链表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205736/

相关文章:

C++ 依赖管理最佳实践

c++ - 虚函数如何影响 static_cast?

Python:比较列表

javascript - 递归挑战 - Edabit

list - OCaml - 向该列表添加一个包含元组列表的新元组

c++ - static const 成员变量相互依赖的初始化

android - 如何过滤一些应用app?

c# - 托管 C++ 中的 List<Tuple<int, float>>

c# - 使用递归属性 ASP.NET/C#

c++ - 如何在嵌套类中重载 << 运算符