编程新人,请大神指教!
题目:
构造一个的环形双向链表,节点中存储的值为正整数,用这个链表进行删除操作。(链表中的元素均不超过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);
}
目前问题是删除总是不成功,求大神指教!