单链表删除的思维误区记录

因为自己大二的时候上数据结构课没好好听,即使学了也没有怎么动手,所以大三重新去学,去思考。

这里想记录的是在写单链表的删除操作的时候的一个误区。

public  void delete(int data) {
        Node<Integer> temp = head.next;
        while((data!=temp.data)&&(temp.next!=null)){
          temp = temp.next;
        }
    .... //下面的就不用写了,误区就在显示的这段代码里面 }

其实如果对单链表结构有一定的了解,就知道,单链表的添加是通过该结点中的一个变量next,来指向下一个结点。

那么在删除结点的时候,我们既要考虑删除的结点A,前面的结点是否可以连接到A的下一个结点。

所以,在删除结点的时候,必须获得这个结点的前一个结点位置,和后一个结点的位置。

即,在这个方法中,如果要用data来做为删除结点的根据,那么需要再用一个变量来存储前一个结点的位置,或者是,提前提取下一个结点的data来与条件data作比较。

Node<Integer> pre = head;
Node<Integer> temp = head.next;
....
if(temp.data==data){
    pre.next = temp.next;
}
if(temp.next.data==data){
    temp = temp.next.next;
}

 

转载于:https://www.cnblogs.com/NYfor2018/p/9660378.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值