因为自己大二的时候上数据结构课没好好听,即使学了也没有怎么动手,所以大三重新去学,去思考。
这里想记录的是在写单链表的删除操作的时候的一个误区。
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; }