由于删除链表结点需要更新上一个结点的指针,所以我们用cur表示当前结点,用prev表示当前结点的上一个结点。
如果当前结点不为空且当前结点的结点值等于给定的val,则需要删除当前结点。删除当前结点可以通过以下做法实现:
如果当前结点的结点值不等于给定的val,则保留当前结点,将cur移动到下一个结点即可。
当当前结点为空时,链表遍历结束,此时所有结点值等于val的结点都被删除。
struct ListNode* removeElements(struct ListNode* head, int val)
{
struct ListNode* cur = head;
struct ListNode* prev = NULL;
while (cur) // 当前遍历结点非空时循环
{
if (cur->val == val) // 删除
{
if (cur == head) // 头删
{
head = head->next;
free(cur);
cur = head;
}
else // 非头删
{
prev->next = cur->next;
free(cur);
cur = prev->next;
}
}
else // 更新迭代prev和cur指针
{
prev = cur;
cur = cur->next;
}
}
return head;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务