面试题5:从尾到头打印链表

来源:互联网 发布:1991年nba总决赛数据 编辑:程序博客网 时间:2024/06/06 00:44

题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值

思路:

1,栈,根据面试官需要是否要改变链表结构

2,递归,原理用到栈

3,可以改变链表结构,就把链头变链尾,改变指针方向

源程序

#include <stdio.h>#include <stdlib.h>#include "stack.h"//尾插法建立链表void create_list(LinkList &L){LinkList p,q;int e;L=(LinkList)malloc(sizeof(Node));L->next=NULL;q=L;printf("建立链表以0结束\n");scanf("%d",&e);while(e){p=(LinkList)malloc(sizeof(Node));p->data=e;p->next=NULL;q->next=p;q=p;scanf("%d",&e);}}//递归方法输出链表void PrintReverse(LinkList &L){if(L!=NULL){if(L->next!=NULL){PrintReverse(L->next);printf("%d\t",L->next->data);}}}int main(){LinkList L,q;int m;create_list(L);q=L;LiStack S;InitStack(S);L=L->next;printf("原链表:\n");while(L){Push(S,L->data);printf("%d\t",L->data);L=L->next;}printf("\n递归输出新链表:\n");PrintReverse(q);printf("\n栈链表:\n");while(!StackEmpty(S)){Pop(S,m);printf("%d\t",m);}return 0;}

结果

建立链表以0结束1 2 3 4 0原链表:1       2       3       4递归输出新链表:4       3       2       1栈链表:4       3       2       1


原创粉丝点击