您的位置:首页 > 职场人生

面试题5

2015-08-11 08:51 381 查看

1 题目描述

输入一个链表的头指针,从尾到头反过来打印出每一个节点的值

2 算法描述

第一个遍历到的节点最后一个输出,而最后一个遍历到的节点第一个输出,典型的“后进先出”,可以用栈实现这种顺序。既然想到用栈来实现这个函数,而递归在本质上就是一个栈结构,于是很自然地又想到了用递归来实现。

#include <stdio.h>
typedef char datatype;
typedef struct node{
datatype data;
struct node *next;
} listnode;
typedef listnode *linklist;

linklist creater()
{
char ch;
linklist head;
listnode *p,*r;
head=NULL;
r=NULL;/*r为尾指针*/
while((ch=getchar())!='\n'){
p=(listnode *)malloc(sizeof(listnode));
p->data=ch;
if(head==NULL)
head=p;/*head 指向第一个插入结点*/
else
r->next=p;/*插入到链表尾部*/
r=p;/*r指向最新结点,即最后结点*/
}
if(r!=NULL)
r->next=NULL;/*链表尾部结点的后继指针指定为空*/
return head;
}
void printlistreversingly_iteratively(listnode* head){
if(head==NULL){
return;
}else{
printlistreversingly_iteratively(head->next);
printf("%c",head->data);
}
}
main()
{
linklist newlist=creater();
printlistreversingly_iteratively(newlist);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: