You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单个变量跟踪链表所有节点?实现输入链表逆序输出

链表问题解答:单变量跟踪与逆序构建输出

嘿,我来帮你搞定这两个链表相关的问题!


问题1:如何仅用一个变量跟踪链表的所有节点?

其实核心思路非常简单:只需要一个指向链表头节点的指针变量就足够了。具体操作逻辑是这样的:

  • 初始时,这个变量设为NULL(表示链表为空)。
  • 每次创建新节点时,让新节点的next指针指向当前的头变量(也就是当前链表的第一个节点)。
  • 然后将这个头变量更新为新创建的节点。

这样一来,这个变量始终指向最新的链表头部,你只需要顺着头部节点的next指针依次遍历,就能访问链表中的所有节点了。举个简单的逻辑示意图:

输入顺序:1 → 2 → 3
构建过程:

  1. 创建节点1,head = 节点1(链表:[1])
  2. 创建节点2,节点2->next = head,然后head = 节点2(链表:[2]→[1])
  3. 创建节点3,节点3->next = head,然后head = 节点3(链表:[3]→[2]→[1])
    最终通过head就能遍历所有节点。

问题2:实现逆序输出的链表构建程序

结合你提到的readline和make_new_node函数,我给你写一个完整的示例程序(以C语言为例,逻辑通用):

首先先定义链表节点的结构,以及实现make_new_node和readline函数:

#include <stdio.h>
#include <stdlib.h>

// 链表节点结构定义
typedef struct Node {
    int data;
    struct Node *next;
} Node;

// 创建新节点的函数
Node* make_new_node(int val) {
    Node *new_node = (Node*)malloc(sizeof(Node));
    if (!new_node) {
        printf("内存分配失败!\n");
        exit(1);
    }
    new_node->data = val;
    new_node->next = NULL;
    return new_node;
}

// 读取用户输入的函数
int readline() {
    int num;
    printf("请输入一个整数(输入非数字结束):");
    // 尝试读取整数,返回值判断是否成功
    if (scanf("%d", &num) != 1) {
        // 清除输入缓冲区的无效字符,避免死循环
        while (getchar() != '\n');
        return -1; // 用-1标记输入结束(你可以根据需求调整结束标记)
    }
    return num;
}

然后是main函数的实现,核心是用单变量跟踪链表,构建逆序链表并输出:

int main() {
    Node *head = NULL; // 单个变量跟踪链表头部
    int input_val;

    printf("开始输入整数,输入非数字结束输入\n");
    while ((input_val = readline()) != -1) {
        // 创建新节点
        Node *new_node = make_new_node(input_val);
        // 新节点指向当前链表头部
        new_node->next = head;
        // 更新头部为新节点,完成插入
        head = new_node;
    }

    // 输出链表中的所有值(逆序)
    printf("\n输入的数值逆序输出为:");
    Node *current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        // 记得释放内存,避免泄漏
        Node *temp = current;
        current = current->next;
        free(temp);
    }
    printf("\n");

    return 0;
}

代码逻辑说明:

  1. 链表构建:每次读取到有效整数后,新节点会被插在链表的头部,这样链表的顺序和输入顺序正好相反。
  2. 遍历输出:从head开始遍历每个节点,输出数据的同时释放内存(好习惯,避免内存泄漏)。
  3. 输入结束处理:当用户输入非整数时,readline返回-1,循环终止。

内容的提问来源于stack exchange,提问作者OptatootatpO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:42:45