一道简单的数据结构题,环形链表问题,不知道哪里出了问题?

编程新人,请大神指教!
题目:

构造一个的环形双向链表,节点中存储的值为正整数,用这个链表进行删除操作。(链表中的元素均不超过232−1​)
Input

多行输入,从第一行开始,每行一个正整数代表链表中的元素,直到遇到−1,之后每行一个正整数x,代表要删除的元素,若删除的元素在链表中存在,则将链表中所有的x全部删去,若不存在,则输出-1,输入再次遇到−1结束,最后将链表中剩余的元素输出
Output

输出若干行,每行若干个整数
对于每个要删除的元素,若删除失败,输出-1,最后输出链表的剩余元素
Examples
Input

5
1
1
3
2
5
4
3
3
4
-1
3
2
6
-1

Output

-1
5 1 1 5 4 4

Note

删除成功时不需要给出任何信息
删除失败时输出 -1

只需在最后输出链表元素,空格分隔

我的代码:
#include
#include
#include
typedef struct node
{
int data;
struct node *qian,*hou;
} NODE;
int delete_cycle(NODE*head,int x)
{
NODE *p;
p=head->hou;
while((p->data!=x)&&(p!=head))
p=p->hou;
if(p==head) return -1;
else{
p->qian->hou=p->hou;
p->hou->qian=p->qian;
free(p);
return 0;}
}
int main()
{
int x;
NODE *head,*p,*q;
head=(NODE *)malloc(sizeof(NODE));//biaotou
scanf("%d",&x);
if(x!=-1)
{
q=(NODE *)malloc(sizeof(NODE));
q->data=x;
head->hou=q;
q->qian=head;
p=q;
}
else
{
head->data=-1;
head->hou=head;
head->qian=head;
}
getchar();
scanf("%d",&x);
while(x!=-1)
{
q=(NODE *)malloc(sizeof(NODE));
q->data=x;
p->hou=q;
q->qian=p;
p=q;
scanf("%d",&x);
}
//chuxian -1
p->hou=head;

//----------------------finished creating

int y,k;
scanf("%d",&y);
while(y!=-1)
    {
        k=delete_cycle(head,x);
        if(k==-1)
            printf("-1\n");
        scanf("%d",&y);
    }
NODE *pr;
pr=head->hou;
do
{
    printf("%d ",pr->data);
    pr=pr->hou;
}while(pr!=head);

}

目前问题是删除总是不成功,求大神指教!

2个回答

k=delete_cycle(head,y); //这里是y不是x

完整代码:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

typedef struct node
{
int data;
struct node *qian,*hou;
} NODE;
int delete_cycle(NODE*head,int x)
{
NODE *p;
p=head->hou;
while((p->data!=x)&&(p!=head))
p=p->hou;
if(p==head) return -1;
else{
p->qian->hou=p->hou;
p->hou->qian=p->qian;
free(p);
delete_cycle(head, x);
return 0;}
}
int main()
{
int x;
NODE *head,*p,*q;
head=(NODE *)malloc(sizeof(NODE));//biaotou
head->data = -1;
head->qian = head->hou = head;
while (true)
{
    scanf("%d",&x);
    if (x == -1) break;
    p =(NODE *)malloc(sizeof(NODE));
    p->hou = head;
    p->qian = head->qian;
    p->data = x;
    head->qian->hou = p;
    head->qian = p;
}

//----------------------finished creating

int y,k;
scanf("%d",&y);
while(y!=-1)
    {
        k=delete_cycle(head,y);
        if(k==-1)
            printf("-1\n");
        scanf("%d",&y);
    }
NODE *pr;
pr=head->hou;
do
{
    printf("%d ",pr->data);
    pr=pr->hou;
}while(pr!=head);
}

图片说明

在主函数里调用delete_cycle      时出错了,把x改成y
 k = delete_cycle(head, y);
还有就是delete_cycle  函数也有问题,你只删除了一个元素,题目要求删除所有相同的元素
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐