链表OJ题目1 (移除链表元素)

简介: 力扣(链接放这里喽)

力扣(链接放这里喽)09c40322cdc942608d943f27c86b5453.png

先贴代码再做讲解:

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

ec2dee96178949cea8cef3a59e351771.png


我们应该先将情况考虑周全,画图分析思路 :


我们假设有上述这种情况,按照题目设想,前面三个6都应该free掉,从3这个位置开始,也就是说我们要返回的头就从此处开始,所以我们先考虑值相等,过掉再继续。


在这个位置,要有一个继续往后走的指针,和保存头部位置的指针,以及一个保存尾部的指针来连接后面的5,因为head确定后就不会再动了,而遍历指针过掉中间的6时,3与5是不相接的,要连接只能说找尾指针。


还有第二种思路,就是值不相等就拿下来,值相等就跳过,free掉:

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


目录
相关文章
|
11小时前
数据结构——链表OJ题
数据结构——链表OJ题
|
11小时前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
11小时前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
|
11小时前
|
存储
三种方法实现获取链表中的倒数第n个元素
三种方法实现获取链表中的倒数第n个元素
15 0
|
11小时前
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
【力扣】83. 删除排序链表中的重复元素、82. 删除排序链表中的重复元素Ⅱ
|
11小时前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
25 0
|
11小时前
leetcode83. 删除排序链表中的重复元素
leetcode83. 删除排序链表中的重复元素
11 0
|
11小时前
leetcode2487.从链表中移除节点
leetcode2487.从链表中移除节点
20 1
|
11小时前
|
算法
常见算法题——203.移除链表元素
【2月更文挑战第9天】
26 0
|
11小时前
|
算法 前端开发
删除排序链表中的重复元素 II
删除排序链表中的重复元素 II
14 0