递归解决方案
public ListNode removeElements(ListNode head, int val) {
if (head==null) return null;
ListNode newhead = removeElements(head.next,val);
if(head.val!=val) head.next = newhead;
else head = newhead;
return head;
}
- 相信newhead中返回了后续结点的正确结果
- 再判断当前结点是否需要被删除
- 删除:令head指向newhead
- 不删除:令head.next指向newhead
- 设置递归结束终点
其他解决方案
public ListNode removeElements(ListNode head, int val) {
ListNode newhead = null;
while (head!=null){
if (head.val!=val){
newhead = head;
break;
}
head=head.next;
}
while (head!=null&&head.next!=null){
if(head.next.val==val){
head.next = head.next.next;
}else head = head.next;
}
return newhead;
}
- 第一个循环:寻找第一个不用删除的结点,并将其赋值给newhead)
- 第二个循环:判断head.next.val==val
- true,则直接删除下一结点,并令head指向下下个结点
- false,则head指向下一结点
- 返回newhead