这里注意我们操作链表的时候都要使用临时指针来进行遍历链表的操作,不然会改变链表的原始数据,这里我使用两种方式来进行删除的操作
原链表删除元素
class Solution {
public ListNode removeElements(ListNode head, int val) {
// if(head==null){
// return head;
// }
while(head!=null && head.val==val){
head=head.next;
}
ListNode pre=head;
while(pre!=null && pre.next!=null){
if(pre.next.val==val){
pre.next=pre.next.next;
}else{
pre=pre.next;
}
}
return head;
}
}
使用虚拟头节点(推荐,代码较为统一)
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyhead=new ListNode(0);
dummyhead.next=head;
ListNode virtual=dummyhead;
// virtual.next=head;
while(virtual.next!=null &&virtual!=null){
if(virtual.next.val==val){
virtual.next=virtual.next.next;
}else{
virtual=virtual.next;
}
}
return dummyhead.next;//这里注意返回的是虚拟头节点的下一个节点,不是head,因为head可能已经被删除掉了
}
}