题目
题意:删除链表中等于给定值 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 输出:[]
思路
画图理清思路即可。
虚拟头节点dummy。创建一个虚拟的头节点指向原来的头节点,使得删除头节点的操作和删除其他节点的操作统一。要删除某个节点,需要将遍历指针指向要删除节点的前一个节点才可以。
实现
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return head;
}
//遍历链表中的所有节点
ListNode dummy = new ListNode(-1, head);
ListNode curr = dummy;
while(curr.next != null){
if(curr.next.val == val){
//若相等,删除节点
curr.next = curr.next.next;
}else{
//若不相等,往后移
curr = curr.next;
}
}
//这里必须返回pre.next,返回head会有问题,head可能已经被删除了
return dummy.next;
}
}