#include<stdio.h>
#include<malloc.h>
#include<stack>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}*LinkList;
LinkList Create_List_Tail(int length)
{//建立链表
LNode *L,*s,*r; //L指向头结点,r指向尾结点,s指向新添加结点
L=(LinkList)malloc(sizeof(LNode));
L->next =NULL;//头结点L->data不存东西
r=L;
for(int i=0;i<length;++i)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&s->data);
r->next =s;
r =s;
}
r->next =NULL;
return L; //返回链表
}
/* 用栈实现从尾到头打印单链表 */
void Reverse_1(LinkList L)
{
stack<int> s;
LNode *p = L->next;
while( L!=NULL &&p != NULL) //入栈
{
s.push(p->data);
p = p->next;
}
while(! s.empty()) //出栈
{
printf("%d ",s.top());
s.pop();
}
}
/* 用递归实现从尾到头打印单链表 */
void Reverse_2(LinkList L)
{
LNode *p=L->next;
if(L!=NULL && p != NULL)
{
Reverse_2(p);
printf("%d ",p->data);
}
}
int main()
{
int length;
printf("表长:");
scanf("%d",&length);
LinkList L = Create_List_Tail(length);
printf("栈方式实现:\n");
Reverse_1(L);
printf("\n");
printf("递归方式实现:\n");
Reverse_2(L);
printf("\n");
return 0;
}
剑指offer--面试题6:从头到尾打印链表
最新推荐文章于 2019-03-06 20:29:30 发布