删除双向链接列表的一部分

时间:2018-11-01 21:53:10

标签: c doubly-linked-list

我应该在 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++;
    }
}

1 个答案:

答案 0 :(得分:0)

如果必须删除a到b节点,则无需为a和b创建新节点。 只需将a-> prefore粘贴到b-> next,则可以将中间的节点作为垃圾节点。在if(j> a)块中,无需重复分配尾迹,但条件是if(j == b)可用于获取b节点。在相同条件下,您可以中断循环。