移除链表元素
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点
示例1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7YHNVGU-1650250120946)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220418100750771.png)]
输入: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
输出:[]
思路
设置虚拟头节点dumy,设置两个指针left,right,
分两种情况
-
right.val == val,此时需要将left.next->right.next,起到删除right指针指向节点的效果
-
right.val != val,则此时只需移动前置指针left即可,left = right
当right指针指向的节点的值等于val时,将left指针指向right指针的下一个节点,起到删除right指针指向节点的效果,将right
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PcNqRK3O-1650250120948)(C:\Users\Administrator\Downloads\流程图.jpg)]
代码
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return head;
}
ListNode dumy = new ListNode(-1,head);
ListNode left = dumy;
ListNode right = head;
while(right != null){
if(right.val == val){
left.next = right.next;
} else{
left = right;
}
right = right.next;
}
return dumy.next;
}
= right.next;
}
return dumy.next;
}