我之前写过一篇关于实现链表的博客:https://blog.csdn.net/question_mark/article/details/101466588
例如,链表中:1 2 5 4 5 5
删除带有数字5的结点,得到 1 2 4
这道题要分为两种情况,空链表和非空链表
如果是空链表,则没有结点可以删除,直接返回即可以
非空的情况下我们这么处理:先处理后续的结点,在处理头结点
处理头节点之后的结点,这里我们创建两个结点来记录,一个是prev,一个是结点是cur(用来判断当前位置的值是不是我们要删除的)如果是的话,用prev来辅助删除,如果不是两个都结点都向后挪
此时判断cur.date为我们要删除的值
我们借助prev来删除,prev.next = cur.next
具体实现的代码如下
public void romoveAllKey(int toremove){
if(head == null){
return;
}
LinkNode prev = this.head;
LinkNode cur = this.head.next;
while (cur != null){
if(cur.date == toremove){
prev.next = cur.next;
cur = prev.next;
}
else{
prev = cur;
cur = cur.next;
}
}
if(this.head.date == toremove){
this.head = this.head.next;
}
return;
}