题意:删除链表中等于给定值 val 的所有节点。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
方法一:使用哨兵节点
public class Yichulianbiaoyuansu {
static class ListNode<E>{
ListNode next; // 对象引用下一个节点对象
E val;//数据:节点数据
ListNode(E val){
this.val = val;
}
}
public ListNode removeElements(ListNode head,int val){
//如果头结点为空,返回空
if(head==null){
return null;
}
//定义哨兵节点
ListNode dummy = new ListNode(-1);
ListNode pre = dummy;
ListNode cur = head;
while (cur!=null){
//如果当前节点是要删除的节点
if ((int)cur.val==val){
ListNode node = cur.next;//保存cur当前节点的后一个节点
cur.next = null;//释放当前节点指向的空间(在java中这一步可以省略,由JVM垃圾回收处理内存空间的释放)
pre.next = node;
}else {
pre = cur;
}
cur = cur.next;
}
return dummy.next;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(4);
ListNode node3 = new ListNode(2);
ListNode node4 = new ListNode(4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
Yichulianbiaoyuansu yichulianbiaoyuansu = new Yichulianbiaoyuansu();
ListNode res =yichulianbiaoyuansu.removeElements(node1,1);
//创建链表节点
while (res!=null){
if(res.next==null){
System.out.print(res.val);
}else {
System.out.print(res.val + "->");
}
res = res.next;
}
}
}