原创 带头节点的动态单链表逆序输出(一)

2010-1-18 18:06 3215 8 8 分类: 软件与OS

#include<stdio.h>             


#include<malloc.h>                
#define datatype char


typedef struct node    


{


 datatype data;        


struct node *next;       


 }linklist;


 


linklist *creatlist()    //尾插法建立链表


{char ch;


linklist *head,*s,*r;


head=(linklist*)malloc(sizeof(linklist));


r=head;


ch=getchar();


while(ch!='$')


{s=malloc(sizeof(linklist));


s->data=ch;


r->next=s;


r=s;


ch=getchar();


}


r->next=NULL;


return head;


}


 void printlist(linklist *t) //输出逆置后链表的节点


{


  linklist *p;


  p="t";


  printf("zuihou de lian biao :\n");


  while(p->next!=NULL)


  {printf("%c->",p->data);


  p="p-">next;


  }


}


 void printlist2(linklist *t) //输出逆置前的链表


{


  linklist *p;


  p="t-">next;


  printf(" xian xing biao :\n");


  while(p->next!=NULL)


  {printf("%c->",p->data);


  p="p-">next;


  }


}


linklist *reverlist(linklist *head)     //逆置链表子函数


{


   linklist *q,*p;


   if(head && head->next)         //判断是否两个以上的元素


{    


   p="head";


   q="p-">next;


   p->next=NULL;//在第一和第二个节点间断开,原来链表为两个,分别


由head和q指向


   while(q)


    {


   p="q";


   q="q-">next;//每次将p指向的第一个节点插入到head指向的节点后


   p->next=head;


   head="p";


     }


 }


   return(head);


}


 void main()


{


 linklist *head=NULL,*p;


printf("please input the serial:\n");


 head=creatlist();/新建链表


printf("\n\n");


 printlist2(head);//输出逆置前的链表


 printf("\n");


 p=reverlist(head);//逆置子函数调用


 printf("\n\n");


printlist(p);//输出逆置后的链表


 }


b78b18e9-fe1f-4c2d-9f79-cd65bd0130b2.jpg

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条