题目链接:203.移除链表元素
思路
本题的链表是不含头节点的链表,因此对于链表头节点的处理比较麻烦。
为了统一处理方式,在给传入链表添加一个头节点。
删除节点的时候应该提前记录前驱节点的地址,用于连接后继节点
可以先大致写出代码的逻辑,然后严格按照逻辑去解决题目,在这个过程中就能逐步发现代码中的逻辑漏洞,重复该步骤直至能够正确的解决题目。
代码
/**
* 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 * cur = head;
ListNode * pre = new ListNode;
pre->next = head;
head = pre;
while (cur) {
ListNode * next;
if (cur->val == val) {
next = cur->next;
pre->next = next;
delete cur;
cur = next;
}
else {
pre = cur;
cur = cur->next;
}
}
ListNode * temp = head->next;
delete head;
return temp;
}
};