单链表应用(一)逆置

来源:互联网 发布:ipad免越狱软件 编辑:程序博客网 时间:2024/06/05 08:47

代码部分:

#include <stdio.h>#include <malloc.h>typedef int ElemType;  typedef struct LNode        //定义单链表结点类型  {      ElemType data;      struct LNode *next;     //指向后继结点  } LinkList; void Reverse(LinkList *&L){    LinkList *p=L->next,*q;    L->next=NULL;    while (p!=NULL)     //扫描所有的结点    {        q=p->next;      //让q指向*p结点的下一个结点        p->next=L->next;    //总是将*p结点作为第一个数据结点        L->next=p;        p=q;            //让p指向下一个结点    }}void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表  {      LinkList *s,*r;      int i;      L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点      L->next=NULL;      r=L;                    //r始终指向终端结点,开始时指向头结点      for (i=0; i<n; i++)      {          s=(LinkList *)malloc(sizeof(LinkList));//创建新结点          s->data=a[i];          r->next=s;          //将*s插入*r之后          r=s;      }      r->next=NULL;           //终端结点next域置为NULL  }  void DispList(LinkList *L)  //输出单链表  {      LinkList *p=L->next;      while (p!=NULL)      {          printf("%d ",p->data);          p=p->next;      }      printf("\n");  }  void DestroyList(LinkList *&L)  //销毁单链表  {      LinkList *p=L,*q=p->next;      while (q!=NULL)      {          free(p);          p=q;          q=p->next;      }      free(p);    //此时q为NULL,p指向尾结点,释放它  } int main(){    LinkList *L;    ElemType a[]= {1,3,5,7, 2,4,8,10};    CreateListR(L,a,8);    printf("L:");    DispList(L);    Reverse(L);    printf("逆置后L: ");    DispList(L);    DestroyList(L);    return 0;}
结果:

感受:好累。

0 0
原创粉丝点击