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

来源:互联网 发布:南瑞信通 知乎 编辑:程序博客网 时间:2024/05/22 02:07

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




原创粉丝点击