算法习题---线性表之单链表逆序打印
一:题目
逆序打印单链表中的数据,假设指针指向单链表的开始结点
二:思路
1.可以使用递归方法,来进行数据打印
2.可以借助数组空间,获取长度,逆序打印数组
3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即可
三:算法实现(这里使用方法一:递归实现简单易懂)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #define ERROR 0 typedef int Status; typedef struct Node { int data; struct Node* next; }LNode,*LinkList; //初始化链表,带有头结点 Status InitList(LinkList* L) { LNode* p,*q; //初始化头结点 *L = (LinkList)malloc(sizeof(LNode)); if (*L == NULL) return ERROR; (*L)->next = NULL; p = *L; //头插法插入数据1-10,也就是说创建后的链表数据是由10-1的 for (int i = 0; i < MAXSIZE; i++) { q = (LNode*)malloc(sizeof(LNode)); q->data = i + 1; q->next = p->next; p->next = q; } return OK; } void InvertPrint(LinkList L) { if (L!=NULL) { InvertPrint(L->next); printf("%d->", L->data); } } int main() { LinkList L; //初始化链表数据 InitList(&L); //打印数据 InvertPrint(L->next); system("pause"); return 0; }