给定一个单链表的头节点head。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉并注释解析
时间: 2023-05-21 19:03:18 浏览: 103
实现在单链表中删去值相同的多余结点的算法.txt
可以使用双指针来遍历链表,一个指针指向当前节点,另一个指针指向当前节点的前一个节点。如果当前节点的值等于val,则把前一个节点的next指针指向当前节点的下一个节点,然后删除当前节点。如果当前节点的值不等于val,则两个指针都向后移动一个节点。最后返回链表的头节点即可。
以下是示例代码:
```
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* prev = dummy;
ListNode* curr = head;
while (curr != NULL) {
if (curr->val == val) {
prev->next = curr->next;
delete curr;
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return dummy->next;
}
```
这段代码实现了删除链表中所有值为val的节点,并返回删除后的链表的头节点。
阅读全文