题目
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == 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
输出:[]
提示:
- 列表中的节点数目在范围 [0, 104] 内
- 1 <= Node.val <= 50
- 0 <= val <= 50
解题思路
举个栗子:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
1.我们先设置一个新的虚拟头节点 newlist ,令 newlist.next = head ,
2.然后我们再设置一个 cur 节点,令 cur.next = newlist , 对链表进行遍历
3.若 cur.next.val == val ,则我们令 cur.next = cur.next.next ,否则令 cur = cur.next
4.注意这一步,因为 cur.next.val == val ,所以我们令 cur.next = cur.next.next,但是这个时候我们不能直接往下走,而是要进入下一次 while 再循环判断一次这个新连接的 cur.next.val 是否等于 val,若不等于我们再令 cur = cur.next ,要是不这么做如果新连接的节点的值也等于 val ,我们就会漏掉这个节点。
5.此时 cur.next = null 我们返回 newlist.next 即可
代码实现
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode newlist = new ListNode(0);
newlist.next = head;
ListNode cur = newlist;
while(cur.next != null){
if(cur.next.val == val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return newlist.next;
}
}
测试结果