题目
题意:删除链表中等于给定值 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;}
}