删除链表中等于给定值 val 的所有节点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* sentinel = new ListNode (0); //建立哨兵节点,其值为0
ListNode *prev = sentinel, *curr = head, *toDelete = nullptr; //定义哨兵节点为前一个节点,现节点为链表
sentinel -> next = head; //将哨兵节点的向后指针连接到链表
while(curr != nullptr) //当前节点后面还不是没有指针时,该循环继续运转
{
if(curr->val == val) //当前节点值与val相同
{
prev->next = curr ->next; //前一节点的向后指针与当前指针相同,这样就没有指针将指向当前节点
toDelete = curr; //当前节点预备删除
}else prev = curr; //若值不相等,则继续往下遍历
curr = curr->next;
if(toDelete != nullptr) //当toDelete有指针时,该循环开始运行
{
delete toDelete; //删除当前节点
toDelete = nullptr; //将让钱节点的指针清空
}
}
ListNode *ret = sentinel ->next; //删除哨兵
delete sentinel;
return ret;
}
};