因为循环单链表与非循环单链表的区别在于尾结点 的指针域next指向不同,循环单链表指向头结点,非循环单链表置NULL因此我简单写一个初始化顺带插入数据,以及输出数据顺带销毁链表 更多操作与我之前发的链表操作一致
#include<iostream> #include<malloc.h> using namespace std; typedef int ElemType; typedef struct node{ ElemType data; struct node *next; } SLink; //初始化并且插入数据 void initSLink(SLink *&L,ElemType a[],int l){ L=(SLink*)malloc(sizeof(SLink)); SLink *p,*pre; //指向自身的循环单链表 L->next=L; pre=L; //尾插法 for(int i=0;i<l;i++){ //申请空间 p=(SLink*)malloc(sizeof(SLink)); //新的结点的指针指向当前尾结点的指针 p->next=L; p->data=a[i]; pre->next=p; pre=p; } } //显示并且销毁链表 int disSLink(SLink *&L){ //首先一个指向 SLink *pre=L,*p=pre->next; if(p==L){ cout<<"当前链表为空"<<endl; return 0; } while(p!=L){ cout<<p->data<<" "; free(pre); pre=p; p=pre->next; } //销毁头结点 free(L); return 1; } int main(){ SLink *L; ElemType a[5]={1,2,2,1,11}; initSLink(L,a,5); disSLink(L); //disSLink(L); return 0; }