题目链接:​​剑指 Offer 18. 删除链表的节点​

Ideas

算法:迭代
数据结构:链表
思路:这道题其实不需要什么双指针,一个指针就可以了。首先声明一个指针cur指向head,然后在保证cur不为空并且cur -> next也不为空的前提下,不断循环,判断cur -> next -> val是否与给定的val相等,如果相等的话,将cur -> next置为cur -> next -> next,相当于删除了cur -> next。这种做法有一个bug,那就是如果head -> val就是我们要删除的val,那么是没法处理的,所以针对head要单独处理一下。

Code

C++

class Solution {
public:
ListNode* deleteNode(ListNode* head, int val) {
if (head -> val == val) {
return head -> next;
}
ListNode *cur = head;
while (cur && cur -> next != nullptr) {
if (cur -> next -> val == val) {
cur -> next = cur -> next -> next;
}
cur = cur -> next;
}
return head;
}
};