203. 移除链表元素
思路
核心的题解部分是懂的,只是细节没处理好导致没做出来!
首先是:定义头指针的时候没有用new开辟新的空间再赋值,这与将已有的空间重命名 是不一样的!(即下面的定义dummydead(需要开辟新地址) 和定义cur(相当于重命名而已)本质就是不一样的,要注意区别!)!
其次是:循环条件处不需要加上cur->next->next的判断,否则将判断不了最后一个元素!
最后是:return之前要记得return的是head,然后要释放dummyhead !
本人题解
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//一般给出的链表是没有头指针的,因此我们需要定义一个头指针(即虚拟头节点)
//ListNode* dummyHead(0);//错误的定义方式!!!!!!!!
ListNode *dummyHead = new ListNode(0);
if (head != NULL) dummyHead->next = head;//将头节点的地址赋值给头指针才算完成
//移除某一个节点元素必须通过上一个节点进行,还要保留下一个节点的地址
ListNode* cur = dummyHead;
//此处不能加上&& cur->next->next != nullptr这个条件,否则最后一个不能判断
while (cur->next != nullptr ) {
//单层循环:
ListNode* p = cur->next;//p用于保留要删除的节点,然后释放掉
if (p->val == val) {
cur->next = cur->next->next;
delete p;
}
else {
cur = cur->next;
}
}
//return dummyHead->next;//值得注意的点
head = dummyHead->next;
delete dummyHead;
return head;
}
};
707. 设计链表
题目链接
思路
看完这道题想上手的时候,感觉跟之前做的“直接给出链表的定义,然后我直接开辟新空间进行操作” 这种方式不一样,也就是说:我不知道初始化的是哪个val和哪个next指针。
206. 翻转链表
题目链接
思路
应该熟记 先保存再翻转 的原则。
本文分享了解决LeetCode中链表问题的经验,包括移除元素时的头指针处理、循环条件调整以及设计链表时的理解。强调了正确定义头指针和避免多余条件的重要性。

404

被折叠的 条评论
为什么被折叠?



