top1编程
← 返回题目
题解

输出字母

1 条题解

  • 0
    @ 2026-8-6 2:18:11

    P4858 输出字母(入门)

    解题思路

    第一步,理解题意。 这道题要练习结构体和链表:创建 5 个结构体变量,分别存储字母 A、B、C、D、E,然后把 5 个变量用指针链接成一个链表,最后从第一个结点开始依次输出链表里的数据。本题没有输入,直接输出 ABCDE。

    第二步,认识链表结点。 链表就像一列手拉手的小朋友,每个人一只手拉着下一个人。用 struct 定义结点 Node,它有两个成员:一个 char 类型的 ch 用来存字母,一个 Node* 类型的 next 用来存"下一个结点的地址"(指针)。这样一个结点既能存数据,又能找到下一个结点。

    第三步,链接成链表。 定义 n1 到 n5 五个结点,分别给 ch 赋 A、B、C、D、E。然后用取地址符 & 把结点连起来:n1.next = &n2,n2.next = &n3,n3.next = &n4,n4.next = &n5。最后一个结点 n5.next 要赋成 0(空指针),表示链表到这里结束,否则遍历时就不知道什么时候该停下来。

    第四步,遍历输出。 用一个指针 p 从第一个结点开始:p = &n1。循环里先输出 p->ch,再让 p 指向下一个结点 p = p->next。当 p 变成 0(空指针)时,说明链表走完了,循环结束。用 p->ch 是"箭头取成员"的写法,等价于 (*p).ch。

    第五步,验证结果。 从 n1 开始依次走:n1 是 A,走到 n2 是 B,再到 n3 是 C、n4 是 D、n5 是 E,输出就是 ABCDE,和样例一致。

    参考代码

    // 输出字母:5个结构体变量存A~E,链接成链表依次输出
    #include <iostream>
    using namespace std;
    struct Node {       // 链表结点
        char ch;
        Node *next;
    };
    int main() {
        Node n1, n2, n3, n4, n5;
        n1.ch = 'A'; n2.ch = 'B'; n3.ch = 'C'; n4.ch = 'D'; n5.ch = 'E';
        n1.next = &n2;  // 依次链接成链表
        n2.next = &n3;
        n3.next = &n4;
        n4.next = &n5;
        n5.next = 0;    // 最后一个结点的next为空
        Node *p = &n1;
        while (p) {     // 从头到尾遍历链表
            cout << p->ch;
            p = p->next;
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    时间复杂度:链表一共有 5 个结点,从头到尾只走一遍,所以是 O(5) 的常数时间。

    空间复杂度:只用了 5 个固定结点,是 O(1) 的常数空间。

    • 1