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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

1. 题目描述

2. 思路分析

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

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

1. 如果cur指向的结点是头结点我们就让头指针head走到下一个结点head=cur->nextfree释放掉当前结点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. 代码实现

/**
 * 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;
}

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6