做题思路:
1,因为要删掉一个节点,要将他的前一个节点指向目标节点的后一个节点,即是与目标节点的前一个节点息息相关,但头节点又没有前一个节点,所以如果正常做要分类讨论
但这里用一个虚拟头节点来指向头节点,这样头节点就有了前一个节点。
2,因为我是c++,所以上面的做法会浪费空间,要手动删除内存空间,用一个 temp 指向要删除的空间,然后用delete解决
3,别忘了链表的遍历的中止条件 : cur->next != nullptr
4,我这里忘了把虚拟头节点的内存删除了,惭愧
1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode() : val(0), next(nullptr) {}
7 * ListNode(int x) : val(x), next(nullptr) {}
8 * ListNode(int x, ListNode *next) : val(x), next(next) {}
9 * };
10 */
11 class Solution {
12 public:
13 ListNode* removeElements(ListNode* head, int val) {
14 ListNode* fakeHead = new ListNode();
15 fakeHead->next = head;
16 ListNode* cur = fakeHead;
17 while (cur->next != nullptr) {
18 if (cur->next->val == val) {
19 ListNode* temp = cur->next;
20 cur->next = cur->next->next;
21 delete temp;
22 } else {
23 cur = cur->next;
24 }
25 }
26 head = fakeHead->next;
27 return head;
28 }
29 };