移除链表元素-力扣

一道基础的链表相关题目,在删除时对头节点进行单独处理。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        while(head != NULL && head->val == val){
            ListNode * t = head;
            head = head->next;
            delete t;
        }
        ListNode * cur = head;
        while(cur != NULL && cur->next != NULL){
            if(cur->next->val == val){
                ListNode * t = cur->next;
                cur->next = cur->next->next;
                delete t;
            }else{
                cur = cur->next;
            }
        }

        return head;
    }
};

另外一种写法是设置一个虚拟节点指向头节点,这样就无需对头节点进行单独处理,最后将head指向虚拟节点的下一个节点。

cpp 复制代码
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作
        ListNode* cur = dummyHead;
        while (cur->next != NULL) {
            if(cur->next->val == val) {
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            } else {
                cur = cur->next;
            }
        }
        head = dummyHead->next;
        delete dummyHead;
        return head;
    }
};
相关推荐
xrgs_shz5 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身5 小时前
代码随想录day4
数据结构·c++·算法
Rachela_z9 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法
细嗅蔷薇@9 小时前
迪杰斯特拉(Dijkstra)算法
数据结构·算法
S-X-S10 小时前
算法总结-数组/字符串
java·数据结构·算法
努力学习java的哈吉米大王10 小时前
数据结构-队列
数据结构
Joyner201811 小时前
python-leetcode-从中序与后序遍历序列构造二叉树
算法·leetcode·职场和发展
因兹菜11 小时前
[LeetCode]day9 203.移除链表元素
算法·leetcode·链表
LNsupermali11 小时前
力扣257. 二叉树的所有路径(遍历思想解决)
算法·leetcode·职场和发展
雾月5511 小时前
LeetCode LCR180文件组合
算法·leetcode·职场和发展