问题描述:
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5
一开始的想法是删除用之前Delete Node in a Linked List的方法就行了。但做完了发现其实难点不是在于删除,而是在于找到头结点。于是自己加了好几个if语句进行操作,debug了好几次才通过的。
我的代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode headTemp=null;
boolean ishead=true;
while(head!=null){
if(head.val==val){
if(head.next!=null){
head.val=head.next.val;
head.next=head.next.next;
}
else{
head=null;
}
}
else{
if(ishead){
headTemp=head;
ishead=false;
}
head=head.next;
}
}
head=headTemp;
while(head!=null&&head.next!=null){//这一段是用来判断尾部节点是否需要删除
if(head.next.next==null){
if(head.next.val==val)head.next=null;
}
head=head.next;
}
return headTemp;
}
}
然后去Discussion区域看到了超帅的解法,递归!感觉和那些大牛差距好大
代码如下:
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;
}