关于使用二级指针删除链表节点的分析

看了网上删除链表指定节点的帖子时,提到了使用二级指针的方法,且对教材经典方法颇为不屑。

        在下不才,却认为这两种方法均出自同源,无有优劣之分。愿细释之

        首先,我们抛出问题:给定头结点,要求删除链表中的指定节点   注:不可以覆盖节点内的值,以区分一道google面试题     

        对于这个问题, 我首先会下一个定论:  若要删除指定节点,必然要遍历链表  且需要一个当前变量cur来记录当前节点 以查询是否为待删节点。 

        cur用来记录当前节点,这时,遍历过程中找到了待删节点。于是,在图谋删除它的时候,发现另外一个定论:

        定论: 若要删除当前节点,必须能够改变 前一节点的next域指针,以完成删除。

        

        总结一下: 依照上述两个定论,且看下面对 二级指针和教科书法的分析:

    教科书中:    设置了节点指针变量 cur ,  此为定论一

                                        设置了节点指针变量 pre, 为的是能够改变前一节点的指针域,  此为定论二

               

                二级指针方法:

                                       设置了 node  **cur, 二级指针。 为了满足  定论一:其中*cur 存储了当前节点的地址。   那么cur是如何遍历的呢?  

  *cur->next 是一个指针变量, 取这个变量的地址交给cur,则cur自动更新为下一个节点的二级指针。

        

如何满足定论二:  二级指针cur是如何更改上一节点的指针域呢?  cur指向的指针变量 正是上一个节点内 next指针变量。

  故如欲改变上一个指针的next域,  只需改变 *cur 的值即可。


总结:   二级指针cur通过指向上一个节点的next变量,  成为了当前节点的二级指针

也因为它指向的了上一个节点next指针变量,故而可以改变上一个next域的值,从而删除当前节点。 

     这两个方法,都逃不出上述的两个定论。   从算法层面看,用哪种方法均无优劣之分。      




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值