Java单链表内容删除第一次关键字为key的节点。
操作过程为以下几步。
1.如果删除的节点为头结点 则直接将头结点置为空。头结点的Next置为新的头结点
if(this.head.data == key) {
this.head = this.head.next;
return;
}
2.如果被删除的节点是处于中间位置的节点。这时候需要实现遍历单链表的工作,找到要删除的key的前驱。
并且将key的前驱与key的Next串联起来达到删除key值的目的。
private ListNode searchPrev(int key) {
ListNode prev = this.head;
while (prev.next != null) {
if(prev.next.data == key) {
return prev;
}
prev = prev.next;
}
return null;
}
ListNode prev = searchPrev(key);
if(prev == null) {
System.out.println("没有你要删除的节点");
return;
}
ListNode del = prev.next;
//3、进行删除
prev.next = del.next;
完整的代码如下:
private ListNode searchPrev(int key) {
ListNode prev = this.head;
while (prev.next != null) {
if(prev.next.data == key) {
return prev;
}
prev = prev.next;
}
return null;
}
//删除第一次出现关键字为key的节点
public void remove(int key){
//1、删除的节点如果是头结点
if(this.head.data == key) {
this.head = this.head.next;
return;
}
//2、找到删除的节点的前驱 如果找不到 返回null
ListNode prev = searchPrev(key);
if(prev == null) {
System.out.println("没有你要删除的节点");
return;
}
ListNode del = prev.next;
//3、进行删除
prev.next = del.next;
}