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

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

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

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;
}

猜你喜欢

转载自www.cnblogs.com/NYfor2018/p/9660378.html