描述
删除链表中等于给定值 val 的所有节点。
示例
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
思路
遍历比较覆盖即可,由于需要覆盖当前元素,因此需要保留前一个节点的指针,设置前后两个指针即可处理。
注意事项
注意链表为null,或者重复节点都在头结点的情况即可。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
//非空检验
if(head == null){
return null;
}
//头结点为val
while(head != null && head.val == val){
head = head.next;
}
//重复节点都在头部
if(head == null || head.next == null){
return head;
}
ListNode res = head;
ListNode before = head;
ListNode after = head.next;
while(after != null){
if(after.val == val){
before.next = after.next;
}else{
before = before.next;
}
after = after.next;
}
return res;
}
}