带头循环单链表删除指定元素
1.remove()
分析:
1)首先要找到删除元素的前驱
2)如果前驱不存在,即就是该单链表中不存在该元素
3)如果前驱存在,则进行删除
程序如下:
private Node searchPre(int key){
Node pre=this.head;
while(pre.next!=this.head){
if (pre.next.data==key){
return pre;
}
pre=pre.next;
}
return null;
}
public int remove(int key) {
Node pre=searchPre(key);
if (pre==null){
throw new UnsupportedOperationException("不存在key");
}
int oldData=0;
Node delNode=pre.next;
oldData=delNode.data;
pre.next=delNode.next;
return oldData;
}
2.removeAllKey()
分析:
removeAllKey()要对整个单链表的所有元素都进行遍历。
此时需要定义两个结点,pre表示要删除元素的前驱,cur表示要进行删除时的结点
。
程序:
public void removeAllKey(int key) {
Node pre=this.head;
Node cur=this.head.next;
while(cur!=this.head){
if (cur.data==key){
pre.next=cur.next;
cur=cur.next;
}else{
pre=cur;
cur=pre.next;
}
}
}