思路:用虚拟头节点来试现,这样无论是头节点还是其他节点所遵循的删除规则都是一样的,除了创建一个虚拟头节点,还要新建一个cur节点用来遍历整个链表,删除时要确保删除的节点不为空,不然会出现编译问题。此处没有考虑c++里的释放内存问题,看起来问题也不大。
题解c++:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummyhead=new ListNode();
dummyhead->next=head;
ListNode* cur=dummyhead;
while(cur->next!=NULL)
{
if(cur->next->val==val)
{
cur->next=cur->next->next;
}
else cur=cur->next;
}
return dummyhead->next;
}
};