本文最后更新于634 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
题目链接/文章讲解/视频讲解::https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html
1.终于到链表了,属于说链表当年在学习的时候就不是很清楚,今天一看题果然,思路是有的,但是不是很清楚。
2.看了代码随想录给出的思路,自己写了一遍,出了一点问题。
3.问题一:虚拟头结点
ListNode * dummyHead = new ListNode(0);
dummyHead -> next = head;
ListNode *cur = dummyHead;
问题二:while一进循环,直接蒙了,循环条件没问题,但是进去我就开始遍历链表就是
cur = cur->next
问题三:在删除节点和返回链表的时候出现问题,一个是没有定义一个临时变量存储要删除的节点导致内存泄漏,另一个是,没注意到要是head节点就是要删除的节点的话,我在最后要return head就会出现问题,所以要先给head赋值后删除dummyHead要不然就出现问题了。
CPP
/**
* 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(0);
dummyHead -> next = head;
ListNode *cur = dummyHead;
while(cur->next !=NULL){
if(cur->next->val == val){
ListNode *temp = cur->next;
cur->next = cur->next->next;
delete temp;
}else{
cur = cur->next;
}
}
head = dummyHead->next;
delete dummyHead;
return head;
}
};