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 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值