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

剑指offer--面试题6:从头到尾打印链表

2017-06-27 21:26 471 查看


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: