题目描述: 解题思路:
题目要求要返回一个新的头节点,因此我们可以采用复制头节点的方式,定义节点cur来代替头节点进行操作,最后返回头节点即可;但是我们要考虑到如果头节点也是需要删除的节点的话,那么使用这种方法就会出错,所以我们可以设置个虚拟节点newHead,然后让虚拟节点指向头节点(newHead->head),此时虚拟节点为头节点,该虚拟节点无意义。接下来就可以进行下面的操作,从虚拟节点开始,看虚拟节点的下一个节点值是否是要删除的元素,若是,则此节点指向要删除节点的下一个节点;若不是,则此节点指向下一个节点,知道下个节点为空为止,最后虚拟节点newHead的下一个节点作为新的头节点进行返回。
具体代码如下:
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode newHead=new ListNode(-1);
newHead.next=head;
ListNode cur=newHead;
while(cur.next!=null){
if(cur.next.val==val){
cur.next=cur.next.next;
}else{
cur=cur.next;
}
}
return newHead.next;
}
}
|