利用链表逆序打印输入字符

利用链表逆序打印输出字符

请多指教

输入n,表示要输入多少个数
接下来输入这n个数

img

img

你的程序是错误的,第一个for循环里面,每次malloc一个节点,并没有对next域进行赋值,从而把链表节点串起来。到你第二个for循环里面,还没有做空指针判断就直接访问next域,而且直接调用free。

下面是我在你程序基础上的改进:

#include <iostream>
using namespace std;

typedef struct Node {
    int data;
    Node* next;

    Node() : data(0), next(nullptr)
    { }
    explicit Node(int data) : data(data), next(nullptr)
    { }
    Node(int data, Node* next) : data(data), next(next)
    { }
}*LinkList;

int main()
{
    int n, m;
    Node dummy; // 虚拟头结点
    LinkList head = &dummy;
    Node* p;

    cin >> n;
    while (n-- > 0) {
        cin >> m;
        Node* node = new Node(m);

        // 每次插入到头结点之后首节点
        p = head->next;
        head->next = node;
        node->next = p;
    }

    p = head->next;
    while (p) {
        cout << p->data << ' ';
        Node* next = p->next;
        delete p;
        p = next;
    }
    cout << endl;
    return 0;
}