package com.company;
import javax.swing.tree.TreeNode;
import java.lang.reflect.Array;
import java.util.*;
public class Main {
public static void main(String[] args) {
ListNode head = new ListNode();
head.val = 2;
ListNode second=new ListNode();
second.val=3;
head.next = second;
ListNode third=new ListNode();
third.val=4;
head.next.next=third;
ListNode list = deleteNode(head,2);
}
public static ListNode deleteNode(ListNode head, int val) {
ListNode tmp=null;
if(head.val==val){//头节点删除要特殊处理
tmp=head;//不能让头节点丢失,先用tmp存起来,Java里可以不把头节点存起来,其他语言要单独释放头节点,就需要存头节点
head=head.next;//让头节点后移一个位置
return head;
}else{
ListNode pre=head;//pre做移动的指针,先从head开始
while(pre.next!=null){//等于空的时候就是最后倒数第二个节点了(不需要再移动),最后一个节点是空。
if(pre.next.val==val){//判断pre的下一个节点的值是否为要删除的值
tmp=pre.next.next;//如果是,就用临时变量把下下个节点存起来
pre.next=tmp;//pre直接连下下个节点
}else{//如果没有找到要删除的值,就使用pre做位置移动
pre=pre.next;//往下移动一个节点
}
}
}
return head;
}
static class ListNode {
private int val;
private ListNode next;
}
}
java相关-链表-删除节点-力扣136
于 2025-06-13 10:36:33 首次发布