【数据结构OJ题】移除链表元素

原题链接:https://leetcode.cn/problems/remove-linked-list-elements/description/

1. 题目描述

2. 思路分析

我们可以定义一个结构体指针变量cur,让cur一开始指向头结点,同时定义一个结构体指针prev,令prev初始化为空指针NULL。

我们使用cur遍历链表,如果当前结点的值和val相等,我们再用if选择语句进行相应操作:

  1. 如果cur指向的结点是头结点 ,我们就让头指针head走到下一个结点(head=cur->next ),再free释放掉当前结点cur。再让cur指向此时的头结点(cur=head)。

  2. 如果cur指向的结点不是头结点,我们就让prev的next指向cur的next

prev->next=cur->next)。再free释放掉当前结点cur。再让cur往后走一步

cur=prev->next)。

如果当前结点的值和val不相等,我们就用prev保存当前结点,让cur往后遍历(cur=cur->next).

3. 代码实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* removeElements(struct ListNode* head, int val){
    struct ListNode *cur=head,*prev=NULL;
    while(cur)
    {
        if(cur->val==val)
        {
            if(cur==head)
            {
                head=cur->next;
                free(cur);
                cur=head;
            }
            else
            {
                prev->next=cur->next;
                free(cur);
                cur=prev->next;
            }
        }
        else
        {
            prev=cur;
            cur=cur->next;
        }
    }
    return head;
}
相关推荐
月亮被咬碎成星星1 小时前
LeetCode[15]三数之和
数据结构·算法·leetcode
JCBP_1 小时前
数据结构3
服务器·c语言·数据结构·vscode
飞川撸码1 小时前
【LeetCode 热题100】240:搜索二维矩阵 II(详细解析)(Go语言版)
leetcode·矩阵·golang
半盏茶香1 小时前
启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——堆的应用之堆排、Top-K问题
java·开发语言·数据结构·c++·python·算法·链表
小竹子142 小时前
L1-1 天梯赛座位分配
数据结构·c++·算法
梭七y3 小时前
【力扣hot100题】(020)搜索二维矩阵Ⅱ
算法·leetcode·职场和发展
Phoebe鑫3 小时前
数据结构每日一题day9(顺序表)★★★★★
数据结构·算法
南玖yy4 小时前
数据结构C语言练习(栈)
c语言·数据结构·算法
MPCTHU5 小时前
二叉树、排序算法与结构图
数据结构·算法·排序算法
m0_555762905 小时前
struct 中在c++ 和c中用法区别
java·c语言·c++