循环单链表的创建,头插法、尾插法——基于C语言数据结构
#include <stdio.h> #include <malloc.h> typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode *next; }CLinkNode; void InitList(CLinkNode *&L){ L=(CLinkNode *)malloc(sizeof(CLinkNode)); L->next=L; } void CreateListF(CLinkNode *&L,int a[],int n){ //头插法 InitList(L); CLinkNode *s; for(int i=0;i<n;i++){ s=(CLinkNode *)malloc(sizeof(CLinkNode)); s->data=a[i]; if(L->next==L){ s->next=L; } else{ s->next=L->next; } L->next=s; } } void CreateListR(CLinkNode *&L,int a[],int n){ InitList(L); CLinkNode *r=L,*s; for(int i=0;i<n;i++){ s=(CLinkNode *)malloc(sizeof(CLinkNode)); s->data=a[i]; r->next=s; s->next=L; r=s; } } void DispList(CLinkNode *L){ CLinkNode *p=L->next; while(p!=NULL&&p!=L){ printf("%d ",p->data); p=p->next; } printf("\n"); } int main(){ CLinkNode *L; int a[]={1,2,3,4,5,6,7,8,9,10}; // CreateListF(L,a,10);DispList(L); CreateListR(L,a,10);DispList(L); }
本次发布是对下列代码的优化!未经过大量实验验证其准确性,欢迎各位老师指正!!希望能够得到更多的建议。
另外以下两种框选的,右边显然要简单些,左边为什么不简单写是有什么不妥的吗,为什么要区分当链表为空的时候或者当插入的位置为1的时候?