
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Node{ 4 int data; 5 Node*next; 6 }Node,*LinkList; 7 CreateLinkList(LinkList*L) 8 { 9 int e,length; 10 Node*r,*t; 11 *L=(LinkList)malloc(sizeof(Node)); 12 scanf("%d",&length); 13 scanf("%d",&e); 14 (*L)->data=e; 15 r=*L; 16 for(int i=1;i<length;i++) 17 { 18 scanf("%d",&e); 19 t=(LinkList)malloc(sizeof(Node)); 20 t->data=e; 21 r->next=t; 22 r=t; 23 } 24 r->next=*L; 25 } 26 SetHead(int n,LinkList*L)//此处应设为指针的地址 27 { 28 for(int i=1;i<=n;i++) 29 *L=(*L)->next; 30 } 31 Delete(int e,LinkList*L) 32 { 33 Node*ppre=*L,*pre=ppre->next,*t=pre->next; 34 while(t->data!=e) 35 { 36 ppre=pre; 37 pre=t; 38 t=t->next; 39 } 40 if(pre==*L)*L=(*L)->next;//要考虑删除结点为头指针的情况,不然会造成死循环 41 ppre->next=t; 42 } 43 Order(LinkList L) 44 { 45 Node*t=L->next; 46 printf("%d ",L->data); 47 while(t!=L) 48 { 49 printf("%d ",t->data); 50 t=t->next; 51 } 52 } 53 int main() 54 { 55 LinkList L; 56 int n,e; 57 CreateLinkList(&L); 58 scanf("%d %d",&n,&e); 59 SetHead(n,&L); 60 Delete(e,&L); 61 Order(L); 62 return 0; 63 64 }