203. 移除链表元素
做题思路:
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 };

浙公网安备 33010602011771号