假设有一个循环链表的长度大于1,且表中既无头结点,也无头指针。已知S为指向链表中某结点的指针。试编写算法,在链表中删除指针S所指结点的前驱结点
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LNode,*LinkList;
LinkList delete_PreNode(LinkList node)
{
if(node==NULL)
return NULL;
else if(node->next==NULL)
{
return node;
}else
{
LinkList p=node;
LinkList q;
while(p->next!=node)
{
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
return node;
}
void print(LinkList node)
{
LinkList m=node;
do{
printf("%d\t",m->data);
m=m->next;
}while(m!=node);
}
int main()
{
LNode n1,n2,n3,n4,n5;
n1.data=1;
n2.data=2;
n3.data=3;
n4.data=4;
n5.data=5;
n1.next=&n2;
n2.next=&n3;
n3.next=&n4;
n4.next=&n5;
n5.next=&n1;
print(&n1);
getchar();
delete_PreNode(&n3);
print(&n1);
getchar();
}