第四周项目3(1)-单链表应用 逆置单链表

来源:互联网 发布:高速公路车流量数据 编辑:程序博客网 时间:2024/06/05 03:17

//linklist.htypedef int ElemType;  typedef struct LNode        //定义单链表结点类型  {      ElemType data;      struct LNode *next;     //指向后继结点  } LinkList;    void CreateListR(LinkList *&L,ElemType a[],int n);//尾插法建立单链表  void DispList(LinkList *L);                       //输出单链表  void Reverse(LinkList *&L);                       //逆置单链表 

//linklist.cpp#include <stdio.h>  #include <malloc.h>  #include "linklist.h"  void CreateListR(LinkList *&L,ElemType a[],int n)//尾插法建立单链表  {      LinkList *s,*r;               //头指针*s与增加的尾指针*r      int i;      L=(LinkList *)malloc(sizeof(LinkList));      r=L;      for(i=0;i<n;i++)      {          s=(LinkList *)malloc(sizeof(LinkList));          s->data=a[i];          r->next=s;          r=s;      }      r->next=NULL;                    //到尾  }  void DispList(LinkList *L)  //输出单链表  {      LinkList *p=L->next;      while(p!=NULL)      {          printf("%d ",p->data);          p=p->next;      }      printf("\n");  }  void Reverse(LinkList *&L)                      //逆置单链表  {      LinkList *p,*q;      p=L->next;                                  //p指针始终指向尾节点(开始指向头节点)      L->next=NULL;      while(p!=NULL)                              //扫描节点      {          q=p->next;                              //q指向p节点的后继节点          p->next=L->next;                        //p节点作为第一个数据节点          L->next=p;                              //插入          p=q;                                    //p指向下一节点,完成“跟随”      }  }  

//main.cpp#include <stdio.h>  #include <malloc.h>  #include "linklist.h"  int main()  {      LinkList *l;      ElemType a[8]={1,2,3,4,5,6,7,8};      CreateListR(l,a,8);      printf("逆置前单链表各节点为:\n");      DispList(l);      Reverse(l);      printf("逆置后单链表各节点为:\n");      DispList(l);      return 0;  }  

知识点总结:

        单链表的应用问题

心得体会:

       通过此例,发现虽然对单链表的基本运算已比较熟悉,不过运用仍不熟练,主要体现在算法分析上,今后还需加强这方面的训练,提高灵活运用能力。



0 0
原创粉丝点击