您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页移除链表元素(C Language)

移除链表元素(C Language)

来源:华佗小知识

题目

思路

由于删除链表结点需要更新上一个结点的指针,所以我们用cur表示当前结点,用prev表示当前结点的上一个结点。

如果当前结点不为空且当前结点的结点值等于给定的val,则需要删除当前结点。删除当前结点可以通过以下做法实现:

  • prev->next = cur->next;
  • free(cur);

如果当前结点的结点值不等于给定的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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务