【leetcode】移除链表元素

时间:2024-02-29 19:24:42

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞????吗,感谢❤️
在这里插入图片描述


目录

  • 方法1. 直接在原链表上移除
  • 方法2

点击查看题目

在这里插入图片描述

方法1. 直接在原链表上移除

思路:
在这里插入图片描述

因为要返回新的头结点,所以定义变量newhead;如果cur->val==val,那么要将cur前面的节点的next指向cur的后一个节点,所以定义变量prev代表cur的前一个节点

struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* cur=head;
    struct ListNode* newhead=NULL;
    struct ListNode* prev=NULL;
    while(cur)
    {
        if(cur->val!=val)
        {
            if(prev==NULL)
            {
                newhead=prev=cur;
                cur=cur->next;
            }
            else
            {
                prev=cur;
                cur=cur->next;
            }
        }
        else
        {
            struct ListNode* next=cur->next;
            free(cur);
            if(prev)
                prev->next=next;
            cur=next;
        }
    }
    return newhead;
}

方法2

在这里插入图片描述
用tail去链接新的链表

struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* cur=head;
    struct ListNode* newhead=NULL;
    struct ListNode* tail=NULL;
    while(cur)
    {
        if(cur->val==val)
        {
            struct ListNode* next=cur->next;
            free(cur);
            cur=next;
        }
        else
        {
            if(tail)
            {
                tail->next=cur;
                tail=tail->next;
            }
            else
            {
                newhead=tail=cur;
            }
            cur=cur->next;
        }
    }
    if(tail!=NULL)
        tail->next=NULL;
    
    return newhead;
}

好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞????吗,感谢看到这里,我们下篇博客见❤️