关于c语言中删除单向链表节点的问题

二话不说先上代码,这是摘自网上的一段代码,用以解读题目所说的问题。

// 假设h为指向链表头结点指针,那么head就是指向h指针的指针
void delete(node ** head)
{
    for (node** curr = head; *curr; )
    {   
    /* curr指向h的地址,所以*curr的值是h内存里存的东西,也就是              第一个节点的地址。从而entry指向第一个节点*/
        node * entry = *curr;
        if (isRemoveOrNot(entry))
        {   // 找到了,curr存着next指针的地址,加*也就是修改next指针变量内存里的东西,也就是下一个节点的地址。所以这里把next保存的地址改成待删除节点的第一个节点的地址,完成删除。
            *curr = entry->next;
            free(entry);
        }
        // 还没找到,entry->next指向下一个节点,也就是保存了下一个节点的地址,再用&取地址,也就是得到next指针的地址,所以curr指向next指针的地址。
        else
            curr = &entry->next;
    }
}

大致思路是首先用一个二级指针指向头指针,然后利用一个一级指针指向第一个节点,接着开始遍历,如果没找到,则把当前节点的next指针的地址保存到二级指针里,一次循环结束,下一次继续从二级指针中取得下一个节点的指针,找不到继续把当前节点的next指针的地址保存到二级指针,如此类推,直到找到了,这时候,通过二级指针修改next指针所保存的值,也就是下一节点的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值