此代码可以正常运行
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
enum Status{ERROR,OK};
//创建一个循环链表
Status CreateList(LinkList &L,int n)
{
LinkList p,q,head,rear;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
head=L;
p=head;
for(int i=0;i<n;i++)
{
q=(LinkList)malloc(sizeof(LNode));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
p=q;
}
while(!p->next)
{
rear=p;
rear->next=head;
}
printf("\n");
return OK;
}
LinkList Connect(LinkList Ta,LinkList Tb) // 为非空单循环链表的合并
{
LinkList p=Ta->next,rear,k;
while(p->next!=Ta)
p=p->next;
p->next=Tb->next;
while(p->next!=Tb)
p=p->next;
p->next=Ta;
return Ta;
}
//找第m个元素
LinkList Element(LinkList L,int m)
{
LinkList pm=L;
while(m--)
{
pm=pm->next;
}
return pm;
}
//删除第m个结点的前驱
Status Delete(LinkList pm)
{
LinkList s=pm,r=s;
while(s->next!=pm)
{
r=s;
s=s->next;
}
r->next=pm;
free(s);
return OK;
}
Status show(LinkList L) //展示单链表
{
LinkList q=L;
printf("now ,look the list\n");
while(q->next!=L)
{
q=q->next;
printf("%d ",q->data);
}
printf("\n");
return OK;
}
main()
{
LinkList Ta,Tb,T,p;
int n,m;
printf("enter the length of list1 and list2\n");
scanf("%d %d",&n,&m);
printf("enter datas\n");
CreateList(Ta,n);
show(Ta);
printf("enter datas\n");
CreateList(Tb,m);
show(Tb);
T=Connect(Ta,Tb);
show(T);
printf("enter m\n");
scanf("%d",&m);
p=Element(T,m);
printf("now,delete the node before m\n");
Delete(p);
show(T);
return 0;
}