#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct Lnode
{
int data;
struct Lnode *next;
}ListNode,*LinkList;
LinkList Creatail()
{
LinkList L,r,s;
int x;
L=(LinkList)malloc(sizeof(ListNode));
r=L;
scanf("%d",&x);
while(x!=0)
{
r->data=x;
s=(LinkList)malloc(sizeof(ListNode));
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=L;
return L;
}
void Print(LinkList L)
{
LinkList p;
p=L;
while(p->next!=L)
{
printf("%d ",p->data);
p=p->next;
}
}
void Delet(LinkList L,LinkList s)
{
LinkList p,q;
p=s->next,q=s;
while(p->next!=s)
{
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
int main()
{
LinkList L,s;
int i,j;
L=Creatail();
Print(L);
printf("\n");
s=L;
printf("你想要删除哪个位置的前驱:");
scanf("%d",&j);
for(i=1;i<j;i++)
s=s->next;
Delet(L,s);
Print(L);
return 0;
}
代码的本意是删除s元素的前驱节点,实验数据为1 2 3 4 5 6,每次删除第二个位置的前驱结点就有问题,但是其它的没有问题,不知道错哪了。
原题目如下:
假设有一个循环链表的长度大于1,且表中既无头结点也无头指针。已知s为指向链表某个结点的指针,试编写算法在链表中删除指针s所指结点的前趋结点。
[提示]:设指针p指向s结点的前趋的前趋,则p与s有何关系?
要求:必须在我的代码基础上进行修改,否则不予采纳