移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6

输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1

输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7

输出:[]

方法:传统求解

利用传统的方法遍历各个节点,判断节点的数据是否为VAL

方法:

struct ListNode* prev = NULL; //删除需要prev和cur

struct ListNode* cur = head;

//逻辑为:prev->next == next

新建两个结构体指针,通过prev->next == next串联起整个链表。

需要注意的是:此方法需要额外注意头删!(prev是空指针,不可以解引用)

头删时,head需要后移一个节点。

cpp 复制代码
struct ListNode* removeElements(struct ListNode* head, int val) {

   

    struct ListNode* prev = NULL;   //删除需要prev和cur

    struct ListNode* cur = head;

        //逻辑为:prev->next == next

    while(cur)

    {

        if(cur->val == val)

        {

            if(prev){

            prev->next = cur->next; //②         //prev最开始是空指针,不能解引用(->)

            free(cur);

            cur = prev->next;   // ①

            //通过①②语句,链接起整个链表;

            }

            else{

                head = cur->next;

                free(cur);

                cur = head;

            }




        }

        else

        {

            prev = cur;

            cur = cur->next;

        }

    }



    return head;

   

}
相关推荐
苦藤新鸡8 分钟前
29.删除倒数第N个节点
数据结构·链表·力扣
重生之我是Java开发战士20 分钟前
【数据结构】Map、Set与哈希表底层原理
java·数据结构·散列表
橘子师兄22 分钟前
C++AI大模型接入SDK—API接入大模型思路
开发语言·数据结构·c++·人工智能
tobias.b35 分钟前
408真题解析-2010-4-数据结构-平衡二叉树插入
数据结构·计算机考研·408真题解析
历程里程碑1 小时前
哈希3 : 最长连续序列
java·数据结构·c++·python·算法·leetcode·tornado
2401_841495641 小时前
【LeetCode刷题】两两交换链表中的节点
数据结构·python·算法·leetcode·链表·指针·迭代法
无尽的罚坐人生1 小时前
hot 100 560.和为 K 的子数组
数据结构·算法·leetcode
Ll13045252981 小时前
leetcode代码随想录数组篇
数据结构·算法·leetcode
Remember_9932 小时前
【LeetCode精选算法】位运算专题一
java·开发语言·数据结构·leetcode·哈希算法
tobias.b2 小时前
408真题解析-2010-5-数据结构-树的结点数量计算
数据结构·算法·408真题解析