0.问题
只能说全忘完了,知道题目虽然简单,但是还是值得记录一下的 。
问题一:忘记处理头节点,不是忘了,而是以为自己处理了,结果自己只是处理了最开始的头结点,更新后头节点有可能改变,这一点自己并没有考虑到。所以,不得不说在开头引入一个空节点是多么的智慧了。
问题二:当自己意识到并引入空节点后,又忘记保存该空节点了,把这个节点跟着大部队走了,最后返回的结果一直是空,把我搞得一脸懵逼。
问题三:循环时出现了问题,我本来用的是for循环,在里面定义的循环迭代,后来才发现这样会导致删除时跳过一个节点,因为删除的时候就已经完成更新了。
大概就这些问题了,真的是好久不写代码,问题真的多。
1.题目
2.代码
/**
* 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* ll = new ListNode(0,head);
ListNode* tp;
ListNode* cur=ll;
while(cur->next){
if(cur->next->val==val){
tp=cur->next;
cur->next=tp->next;
delete tp;
}
else{
cur=cur->next;
}
}
return ll->next;
}
};