给定一个单链表的头节点head。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉
时间: 2023-05-21 09:03:15 浏览: 92
实现在单链表中删去值相同的多余结点的算法.txt
可以使用双指针的方法,一个指针指向当前节点,另一个指针指向当前节点的前一个节点。遍历链表,如果当前节点的值等于val,则把前一个节点的next指向当前节点的next,即跳过当前节点。如果当前节点的值不等于val,则把两个指针都向后移动一位。最后返回头节点即可。
以下是示例代码:
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = new ListNode(0); // 创建一个虚拟头节点
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != nullptr) {
if (curr->val == val) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
head = dummy->next;
delete dummy;
return head;
}
阅读全文