题目:
删除链表中等于给定值 val 的所有节点
实例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题思路:
前后两个结点依次遍历每一个链表元素即可。这道题的易错点在于对头结点就等于val的处理上,因此两种办法处理头结点:
方法一
忽视头结点,直接从第二个结点开始判断,在最后的最后处理头结点
//1.cur走前面,prev走后面
//2.while(cur的val相等时,prev的next指向cur的next)
//3.我们默认从第二个节点开始判断的,在最后判断一下头节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head == NULL){
return NULL;
}
ListNode* cur = head->next;
ListNode* prev = head;
while(cur != NULL){
while(cur != NULL && cur->val == val){
prev->next = cur->next;
cur = cur->next;
}
prev = prev->next;
if(prev == NULL)
break;
cur = prev->next;
}
if(head->val == val){
return head->next;
}
return head;
}
};
方法二
创建一个新的头结点指向原来的头结点,处理完毕之后,最后把创建的这个头结点删除即可。
ListNode* newhead = new ListNode(-1);