题目
代码
/**
* 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); // 制作哨兵节点
sentinel->next = head;
ListNode* pre = sentinel;
ListNode* curr = head;
while(curr != nullptr) {
if(curr->val == val) { // 要删除的节点
pre->next = curr->next;
curr = curr->next;
} else {
pre = pre->next;
curr = curr->next;
}
}
return sentinel->next;
// //创建一个虚拟头结点
// ListNode* dummyNode = new ListNode(val-1);
// dummyNode->next = head;
// ListNode* prev = dummyNode;
// //确保当前结点后还有结点
// // 这样写巧妙的确保了指针不为空
// while(prev->next != nullptr){
// if(prev->next->val == val){
// prev->next = prev->next->next;
// }else{
// prev=prev->next;
// }
// }
// return dummyNode->next;
}
};