题目:假设某个单向循环链表的长度大于1,且表中既头结点也无头指针。已知S为指向链表中节点的某个指针,
试编写算法在链表中删除单向循环链表中指针S所指结点的前驱节点
#include <stdio.h>
#include <stdlib.h>
#define OVERFLOW -1
#define ERROR -1
typedef struct LNode
{
int data;
int length;
struct LNode *next;
}SqList;//创建单向循环链表
int create_Sq(SqList &L);
int DeleteS(SqList &L);
int create_Sq(SqList &L)
{
LNode *p;
LNode *head;
LNode *tail;
int elem;
int length;
printf("输入此循环链表的长度 length = ");
scanf("%d", &length);
head=NULL;
tail=NULL;
for(int i=1;i<=length;i++)
{
printf("输入第%d个元素的值 ", i);
scanf("%d", &elem);
p = (LNode*)malloc(sizeof(LNode));
p->data = elem;
if(head)
{ //如果第一个结点不存在,即空链表
head=tail=p; //设置第一个结点
head->next=NULL;
}
else
{//链表非空
p->next=tail->next ;
tail->next=p;
}
tail = p; //移动尾指针
}
tail->next=head;
return 0;
}
/*
函数功能:删除单向循环链表中指针S所指结点的前驱节点
函数入口:单向循环链表L
函数出口:单向循环链表L
*/
int DeleteS(SqList &L)
{
int e;
LNode *p,*q,*s;
printf("输入要删除的元素:e ");
scanf("%d",&e);
s->data=e;
p=s;
while(p->next->next!=s)
p=p->next;
q=p->next;
p->next=s;
free(q);
return 0;
}
int main()
{
int i;
SqList L;
create_Sq(L);
DeleteS(L);
for(i=0;i<L.length;i++)
{
printf("%d ",L.data[i]);
}
printf("\n");
return 0;
}
VC6.0环境下报错cpp(84) : error C2109: subscript requires array or pointer type,求解