数据结构代码_day01

**题目:在带头结点的单链表工中,删除所有值为x的结点,并释放其空间
假设值为x的结点不唯一,试编写算法以实现上述操作。

算法思想:**
(1)定义三个指针 : p 用于遍历链表,pre 用于指向当前节点的前一个节点,q 用于临时存储需要删除的节点。
(2)指针初始化:p 初始化为链表的头节点 L->next,因为头节点通常是 NULL 或者包含数据。 pre始终指向 p 前一个节点的指针。
(3)遍历链表:使用 while 循环遍历链表,直到 p 为 NULL,即链表末尾。并在循环内部,首先检查当前节点 p 的数据 p->data 是否等于要删除的值 x。

	如果找到要删除的节点(p->data == x)执行以下步骤:
	<1>将 q 指向当前节点 p,以便稍后释放内存。
	<2>将 p 移动到下一个节点 p->next。
	<3>将 pre 的 next 指针指向 p,从而跳过当前要删除的节点。
	<4>释放 q 指向的内存。

如果当前节点不是要删除的节点,将 pre 更新为 p,然后 p 移动到下一个节点。
在这里插入图片描述

void delete_x(LintLink &L, Elemtype x) {
    LNode *p = L->next, *pre = L, *q;
    while(p != NULL) {
        if(p->data == x) {  // 找到要删除的节点
            q = p;  // 找到待删除x,赋值给q
            p = p->next;  // p遍历到下一个节点
            pre->next = p;  // 删除x
            free(q);
        } else {  // 未找到要删除的节点
            pre = p;
            p = p->next;   
        }
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值