题目:反向输出一个链表。

程序分析:首先遍历链表,将每个节点的数据保存在数组中。然后按照相反的顺序输出数组中的数据。

实例

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

typedef struct LNode{
    int data;
    struct LNode *next;
} LNode, *LinkList;

LinkList CreateList(int n);
void print(LinkList h);
void reversePrint(LinkList h);

int main() {
    LinkList Head = NULL;
    int n;
    
    printf("请输入链表的节点个数:");
    scanf("%d", &n);
    
    Head = CreateList(n);
    
    printf("刚刚建立的链表元素的值为:\n");
    print(Head);
    
    printf("反向输出链表元素的值为:\n");
    reversePrint(Head);
    
    printf("\n\n");
    system("pause");
    return 0;
}

LinkList CreateList(int n) {
    LinkList L, p, q;
    int i;
    
    L = (LNode*)malloc(sizeof(LNode));
    if (!L)
        return NULL;
    
    L->next = NULL;
    q = L;
    
    for (i = 1; i <= n; i++) {
        p = (LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:", i);
        scanf("%d", &(p->data));
        
        p->next = NULL;
        q->next = p;
        q = p;
    }
    
    return L;
}

void print(LinkList h) {
    LinkList p = h->next;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

void reversePrint(LinkList h) {
    int array[100];
    int i = 0;
    LinkList p = h->next;
    
    while (p != NULL) {
        array[i++] = p->data;
        p = p->next;
    }
    
    for (i = i - 1; i >= 0; i--) {
        printf("%d ", array[i]);
    }
    printf("\n");
}

在上述代码中,我们定义了一个结构体 LNode,用于表示链表的节点,包括一个整型数据 data 和一个指向下一个节点的指针 next

然后,我们定义了 CreateList() 函数,用于创建链表。通过循环获取用户输入的节点数据,并将其保存到新建节点中,然后按照链表的顺序连接这些节点,最终返回链表的头节点。

main() 函数中,我们首先获取用户输入的链表节点个数 n,然后调用 CreateList() 函数创建链表,并将返回的链表头节点保存在 Head 变量中。

接下来,我们调用 print() 函数,遍历链表并输出节点的数据。

然后,我们定义了 reversePrint() 函数,该函数用于反向输出链表的数据。首先,我们使用一个数组 array 来保存链表节点的数据。然后,按照相反的顺序遍历数组并输出数组中的数据。

最后,程序通过返回 0 来结束程序的执行。

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想, c语言练习, c语言练习题