1

这是我删除具有参数中传递的值的所有节点的代码。

typedef struct nodetype
{
    int data;
    struct nodetype * next;
} node;

typedef node * list;


void Linklist::deleteNode(list * head, int value)
{

    list current = *head;
    list previous = *head;
    while(current != NULL)
    {
        if(current->data != value)
        {
              previous = current;
              current = current->next;
        }

        else if (current->data == value)
        {
            previous->next = current->next;
            delete current;
            current = previous->next;

        }
    }
} 

但是在这里,如果链接列表中的所有元素都是 2,那么它应该删除链接列表中的所有元素,最后 head 也应该变为 NULL,这样如果我通过这个 head 来计算列表中的节点数,它应该说列表为空等类似操作。

根据我目前的实现,对于上述情况,头部不会变为 NULL。

请提出修改建议,如果链接列表的所有节点在函数参数中传递的值相同,则 head 应变为 NULL。

4

1 回答 1

2

我现在修改了我的代码及其工作文件

void Linklist::deleteNode(list *head, int value)
{

    list * current = head;
    list * previous = head;
    bool flag = false;
    while(*current != NULL)
    {
        if((*current)->data != value)
        {
            *previous = *current;
            *current = (*current)->next;
        }

        else if ((*current)->data == value)
        {
            flag = true;
            (*previous)->next = (*current)->next;
            delete *current;
            *current = (*previous)->next;

        }
    }
    if(!flag)
        cout<<"Element not found in the linklist\n";
    cout<<"Count is "<<Linklist::count(*head)<<endl;
}
于 2012-04-17T20:14:50.457 回答