我应该在 C 中编写一个函数,该函数将双向链接列表的一部分从列表中的位置“ a”删除到位置“ b”,并将删除的部分粘贴到另一个列表中叫做“垃圾” 我已经编写了此函数,但没有得到正确的输出:
typedef struct list // I defined the structure outside the main function:
{
int data ;
struct list *next;
struct list *precedent;
}node;
void cut(node *x) // x is the pointer referring to the head of the
list
{
int a,b,j=1;
node *starttrash,*sup,*endtrash;
starttrash=(node*)malloc(sizeof(node));
starttrash->precedent=NULL;
starttrash->next=endtrash;
starttrash->data=0;
endtrash=(node*)malloc(sizeof(node));
endtrash->precedent=starttrash;
endtrash->next=NULL;
endtrash->data=0;
printf("enter the value of a \n");
scanf("%d",&a);
printf("enter the value of b \n");
scanf("%d",&b);
while(j<b)
{
if(j>a)
{
starttrash->next=x;
endtrash->precedent=x;
x->next=x->next->next;
sup=sup->next;
}
else x=x->next;
j++;
}
}
答案 0 :(得分:0)
如果必须删除a到b节点,则无需为a和b创建新节点。 只需将a-> prefore粘贴到b-> next,则可以将中间的节点作为垃圾节点。在if(j> a)块中,无需重复分配尾迹,但条件是if(j == b)可用于获取b节点。在相同条件下,您可以中断循环。