清空链表的算法

 

思路:从首元结点依次将所有结点释放掉,头结点后面没有元素后,将头结点的指针域设置为空。

p=L.next,p指向首元结点,但不能直接释放首元节点。要先把下一个结点记录下来

 

那就用另一个变量q,指向要释放掉结点的下一个结点

 q指针变量要存储的是第二个结点的地址,他在第一个结点的next域里存着,只需将第一个结点的Next域赋值给他,就可以指向第二结点了。第一个结点的Next域是指针变量p所指的这一结点的Next域,所以将p的next域赋值给q,就是将下一结点的地址赋值给q,q就指向下一结点了。

 

那就可以将p删除了

下一个要删q,所以p=q,他们内容一样,然后q在指向下一个 

 

这两句不能交换

 

p=q;

q=q->next;

不然都指向下一个结点

删到p指针指的结点是空结点结束

反复做则p不为空

 

最后q=q->next,q指向空,不指向任何结点,再p=q,然后他们都指向空了

我们将头结点的指针域设置为空,就可以结束了

上次是P=L;

要看从哪个开始,如果从头结点开始就,p=L;

如果从首元结点开始,那就p=L->next;

上面是操作单链表最常用的两句.

以下为完整算法

需要两个指针p,q

p存放要删除的结点,q存放p的下一个结点

 

从第一个存储元素值的结点开始

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值