假设在长度大于 1 的单循环链表中,既无头结点也无头指针。
假设在长度大于 1 的单循环链表中,既无头结点也无头指针。s 为指向某个结点的指针,试编写算法删除结点*s 的直接前驱结点。
在vc中运行为什么不对啊啊
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
///创建链表
Status CreateList(LinkList &L,int n)
{
int i;
L=(LinkList)malloc(sizeof(LNode));
LinkList L1=L;
if(!L)exit(ERROR);
L1->next=NULL;
printf("Please input numbers:\n");
for(i=0;i<n;i++)
{
scanf("%d",&L1->data);
if(i==n-1)
L1->next=L;//L1->next=NULL;
else
{
LinkList p=(LinkList)malloc(sizeof(LNode));
L1->next=p;
L1=p;
}
}
return OK;
}
///输出元素
Status PrintList(LinkList L,int m)
{
int i=1;
printf("The numbers are:");
while(L)
{
printf("%d ",L->data);
if(i>=m) break;
if(L->next)
{L=L->next;i++; }
else
break;
}
printf("\n");
return OK;
}
///删除结点*s 的直接前驱结点
Status DeleteList(LinkList &L,LinkList s)
{
//int locat=0;
LinkList p,q;//=(LinkList)malloc(sizeof(LNode));
p=s;
//LinkList s=(LinkList)malloc(sizeof(LNode));
//s->data=e;
while(p->next->next!=s)
{
q=p;
p=p->next;
free(s);
return OK;
}
q->next=s;
free(q);
return OK;
}
//主函数
int main()
{
int n,slocat;
ElemType e;
LinkList L,s;
printf("Please input the number you need:");
scanf("%d",&n);
CreateList(L,n);
PrintList(L,n);
printf("请输入结点S的位置:");
scanf("%d",&slocat);
DeleteList(L,s);
n=n-1;
PrintList(L,n);
system("pause");
}