题目描述
删除链表中等于给定值 val 的所有节点.
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
循环法
注意:
- 给此链表添加头节点,方便编程
- 返回时不可返回head,因为head可能已经不在删除后的链表中
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
lass Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyhead=new ListNode(val-1);
dummyhead.next=head;
ListNode pre=dummyhead;
while(pre.next!=null){//检查pre的下一个元素
if(pre.next.val==val){
ListNode deleted=pre.next;
pre.next=pre.next.next;
deleted.next=null;
}
else{
pre=pre.next;
}
}
return dummyhead.next;
}
}
递归法
class Solution{
public ListNode removeElements(ListNode head, int val){
if(head==null) return null;//最基本情况
head.next=removeElements(head.next,val);
return head.val==val?head.next:head;//非最基本情况,简化
}
}