promise998 2018-11-03 05:51 采纳率: 0%
浏览 550
已采纳

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

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

构造一个的环形双向链表,节点中存储的值为正整数,用这个链表进行删除操作。(链表中的元素均不超过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条回答 默认 最新

  • threenewbee 2018-11-03 06:31
    关注

    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);
    }
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 3月18日

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办