当前位置: 首页 > news >正文

leetcode-代码随想录-链表-移除链表元素

题目

链接:203. 移除链表元素 - 力扣(LeetCode)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
image

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        
    }
};
思路 & 代码
  1. 由于要删除的节点可能是头节点,所以为了方便采用 虚拟头节点 的方法来移除元素。
  2. 设置虚拟头节点:ListNode* dummyHead = new ListNode(0);
  3. 移除元素:找到目标val节点 的前一个节点 cur,将其指向下下一个节点cur->next = cur->next->next
  4. 释放被移除元素的内存

注意点: 在判断cur->nextcur->val时,要先判断cur不为空,否则就是报空指针错误

#include <iostream>
using namespace std;

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) {
        ListNode* dummyhead = new ListNode(0);
        dummyhead->next = head;
        ListNode* cur = dummyhead;
        while(cur->next != nullptr){
            if(cur->next->val == val){
                ListNode* temp = cur->next;
                cur->next = cur->next->next;
                delete temp;
            }else{
                cur = cur->next;
            }
        }
        head = dummyhead->next;
        delete dummyhead;
        return head;
    }
};

void printLinkedList(ListNode* head){
    ListNode* cur = head;
    while(cur != nullptr) {
        cout << cur->val << " ";
        cur = cur->next;
    }
    cout << endl;
}

int main() {
    
    int n, m;
    ListNode* dummyHead = new ListNode(0);
    while(cin >> n){
        if(n == 0){
            cout << "list is empty" << endl;
            continue;
        }

        ListNode* cur = dummyHead;

        while(n--){
            cin >> m;
            ListNode* newNode = new ListNode(m);
            cur->next = newNode;
            cur = cur->next;
        }
    }

    ListNode* head = dummyHead->next;
    delete dummyHead;
    printLinkedList(head);

    int val = 6;
    Solution obj;
    ListNode* result = obj.removeElements(head,val);
	
    printLinkedList(result);
}

时间复杂度: O(n)
空间复杂度: O(1)

http://www.dtcms.com/a/111799.html

相关文章:

  • Docker安装、配置Nacos
  • 网络安全基础知识总结
  • RabbitMQ高级特性2
  • MINIQMT学习课程Day6
  • React项目在ts文件中使用router实现跳转
  • 搜索与图论 树的广度优先遍历 图中点的层次
  • MusicMint ,AI音乐生成工具
  • bun 版本管理工具 bum 安装与使用
  • oracle账户被锁定了应该怎么办
  • Oracle数据库数据编程SQL<7.2 推荐管理工具:DBeaver Community安装教程>
  • 2021 CCF CSP-S2.括号序列
  • 软件工程(应试版)图形工具总结(二)
  • (二)RestAPI 毛子(Tags)
  • 第15届蓝桥杯省赛python组A,B,C集合
  • stable diffusion部署ubuntu
  • 识别干扰验证码——Python || Tesseract-OCR
  • 【深度学习】CNN简述
  • Talend API Tester
  • 请求被中止: 未能创建 SSL/TLS 安全通道。
  • Nature Communications|马兰戈尼效应构建空心金字塔微阵列制备高灵敏度柔性电容式压力传感器(健康监测/柔性压力传感/柔性电子/人机交互)
  • Spring 核心技术解析【纯干货版】- XXII:Spring 扫描效率提升模块 Spring-Context-Indexer 模块精讲
  • Lock接口方法介绍
  • JavaScript 中那些不常见的 for 循环命名与高阶用法
  • ModuleNotFoundError: No module named ‘matplotlib_inline‘
  • C++进阶知识复习 31~38
  • SSL证书自动化管理(ACME协议)工作流程介绍
  • 小动物多导生理记录仪产品需求定义
  • 12.青龙面板自动化我的生活
  • 01背包问题:详细解释为什么重量维度必须从大到小遍历。
  • SignalR给特定User发送消息