算法习题---线性表之单链表逆序打印

一:题目

逆序打印单链表中的数据,假设指针指向单链表的开始结点

二:思路

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;
}

 

posted @ 2018-08-31 19:20  山上有风景  阅读(708)  评论(0编辑  收藏  举报