给你一个链表的头节点 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
删除结点的步骤
- 找到该结点的前一个结点
- 进行删除操作
三种方法
- 删除头结点时另做考虑(由于头结点没有前一个结点)
- 添加一个虚拟头结点,删除头结点就不用另做考虑
- 递归
方法一(删除头结点时另做考虑)
[]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public ListNode removeElements(ListNode head, int val) { while(head!=null&&head.val==val){ head=head.next; } if(head==null) return head; ListNode prev=head; while(prev.next!=null){ if(prev.next.val==val){ prev.next=prev.next.next; }else{ prev=prev.next; } } return head; } }
|
方法二(添加一个虚拟头结点)
[]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dummyNode=new ListNode(val-1); dummyNode.next=head; ListNode prev=dummyNode; while(prev.next!=null){ if(prev.next.val==val){ prev.next=prev.next.next; }else{ prev=prev.next; } } return dummyNode.next; } }
|
方法三(递归)
[]1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public ListNode removeElements(ListNode head, int val) { if(head==null) return null; head.next=removeElements(head.next,val); if(head.val==val){ return head.next; }else{ return head; } } }
|