首页 > 其他分享 >【leetcode】链表篇刷题 --

【leetcode】链表篇刷题 --

时间:2024-04-02 09:34:27浏览次数:13  
标签:current head ListNode val -- next 链表 curr leetcode

//删除指定value节点
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        
        //单独处理head
        while(head != NULL && head->val == val){
            ListNode* temp = head;
            head = head->next;
            delete temp;
        }
        
        ListNode* current = head;
        //处理非head
        while(current != NULL && current->next != NULL){
            if(val == current->next->val){
                ListNode* temp = current->next;
                current->next = current->next->next;
                delete temp;
            }else{
                current = current->next;
            }
        }
        return head;
    }
};
/*
 * @lc app=leetcode.cn id=203 lang=cpp
 *
 * [203] 移除链表元素
 */

// @lc code=start
/**
 * 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) {
        //用于统一做删除处理
        ListNode* fHead = new ListNode(0);
        fHead->next = head;
        //用于遍历list
        ListNode* current = fHead;
        while(current->next != NULL){
            if(current->next->val == val){
                ListNode* temp = current->next;
                current->next = current->next->next;
                delete temp;
            }else{
                current = current->next;
            }
        }
        //返回时特别注意,经删除操作后,list已发生变化,返回虚拟头节点的next即可
        head = fHead->next;
        delete fHead;
        return head;
    }
};
// @lc code=end


/*
 * @lc app=leetcode.cn id=206 lang=cpp
 *
 * [206] 反转链表
 */

// @lc code=start
/**
 * 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* reverseList(ListNode* head) {
        ListNode* prev = nullptr;
        ListNode* curr = head;
        while(curr){
            ListNode* next = curr->next;
            curr->next = prev;
            prev = curr;
            curr = next;
        }
        //循环结束后curr=null
        return prev;

    }
};
// @lc code=end

/*
 * @lc app=leetcode.cn id=206 lang=cpp
 *
 * [206] 反转链表
 */

// @lc code=start
/**
 * 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* reverseList(ListNode* head) {
        return reverse(nullptr, head);
       

    }
    ListNode* reverse(ListNode* prev, ListNode* cur){
        if(cur == nullptr){
            return prev;
        }
        ListNode* temp = cur->next;
        cur->next = prev;
		//注意这里cur,对应参数prev,temp对应参数cur
		//相当于将prev与cur分别下移一位
		//就等同于实现: prev = cur; cur = temp;
        return reverse(cur,temp);
    }
};
// @lc code=end

/*
 * @lc app=leetcode.cn id=24 lang=cpp
 *
 * [24] 两两交换链表中的节点
 */

// @lc code=start
/**
 * 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* swapPairs(ListNode* head) {
        ListNode* dummyHand = new ListNode(0);
        dummyHand->next = head;
        ListNode* curr = dummyHand;
        //curr在完成第一对交换后,每次循环均指向上一次交换中的node1节点so 判断是否满足交换条件
        //需要含有 curr->next->next != nullptr
        //而curr->next!=nullptr是为了上面这句判断条件不报错(如果curr->next=null则curr->next->next != nullptr,空指针异常)
        while(curr->next != nullptr && curr->next->next != nullptr){
            ListNode* node1 = curr->next;
            ListNode* node2 = curr->next->next;
            curr->next = node2;
            node1->next = node2->next;
            node2->next = node1;
            curr = node1;
        }
        return dummyHand->next;
    }   
};
// @lc code=end

标签:current,head,ListNode,val,--,next,链表,curr,leetcode
From: https://www.cnblogs.com/MR---Zhao/p/18033281

相关文章

  • Unity开发之音效相关
    目录音频文件的导入音频源相关麦克风输入相关获取麦克风设备信息开始录制获取音频数据用于存储或者传输代码控制音频源动态控制音效播放示例音频文件的导入常用格式:wav,mp3,ogg,aiffForceToMono(多声道转单声道)Normalize(强制为单声道,混合过程中被标准化)Loa......
  • 软件工程
    第一章软件工程概论【考核内容】软件危机的概念、产生原因、解决途径;软件工程的概念、基本原理;软件生命周期;主要的软件过程模型:瀑布模型、快速原型模型。【考试要求】1.理解软件危机的产生原因及解决途径;软件危机:在计算机软件的开发和维护过程中所遇到的一系列严重问题。......
  • 【Docker】搭建便捷的Docker容器管理工具 - dockerCopilot
    【Docker】搭建便捷的Docker容器管理工具-dockerCopilot前言本教程基于绿联的NAS设备DX4600Pro的docker功能进行搭建。前面有介绍过OneKey,而dockerCopilot便是OneKey的升级版,作者对其进行了重新命名,并且对界和功能都进行了全面的优化。目前通过绿联自带的Docker管理器......
  • LLM面面观之MoE
    1.背景根据本qiang~最新的趋势观察,基于MoE架构的开源大模型越来越多,比如马斯克的Grok-1(314B),Qwen1.5-MoE-A2.7B等,因此想探究一下MoE里面的部分细节。此文是本qiang~针对大语言模型的MoE的整理,包括原理、流程及部分源码。2.MoE原理MoE的流行源于”欧洲的OpenAI”Mistral......
  • 《拆解一切问题》如何成为解决难题的高手 - 三余书屋 3ysw.net
    拆解一切问题:如何成为解决难题的高手今天给大家分享的这本书叫做《拆解一切问题》,标题看起来确实有点虚,在没有读这本书之前,会让人感觉似乎只要读完学会书中的内容,就可以解决一切问题了。但事实上这种认识是误解,并没有什么问题的解决可以采用通用的方法。不过,作者在文中聊到的......
  • Transformer简介
    参考:https://www.zhihu.com/tardis/bd/art/600773858?source_id=1001Transformer是谷歌在2017年的论文《AttentionIsAllYouNeed》中提出的,用于NLP的各项任务1、Transformer整体结构在机器翻译中,Transformer可以将一种语言翻译成另一种语言,如果把Transformer看成一个黑盒,那......
  • 《第3选择》解决所有难题的关键思维 - 三余书屋 3ysw.net
    第3选择:解决所有难题的关键思维《第3选择》解决所有难题的关键思维,面对两难困境,从冲突中找到互相协同的出路你好,今天我们要聊的这本书是《第3选择》,它出自美国著名作家史蒂芬·科维之手。科维是国际上非常知名的管理学家,甚至被《时代》周刊评为史上最有影响力的25人之一,《......
  • WEB专项-代码审计(二)&文件包含
    本篇书自上篇。二十三、easy_serialize_php1.进行代码审计。(1)将php、flag、php5等关键字替换为空格(2)若设置了SESSION,则将其重置掉,对其重新赋值,对POST传参进行键值分离。(3)对img_path传参进行base64加密,因为sha1加密是不可逆的,所以不能让程序走入else判断。然后对SESSION传参......
  • 【SQL Server】2. 将数据导入导出到Excel表格当中
    最开始,博主介绍一下自己的环境:SQLSever2008R2SQLSever大致都差不多1.通过自带软件的方式首先找到下载SQLSever中提供的导入导出工具如果开始界面没有找到自己下载的路径C:\ProgramFiles\MicrosoftSQLServer\100\DTS\Binn下的DTSWizard.exe文件导出1.1......
  • 大数据之 MapReduce 相关的 Java API 应用
    注意:本文基于前两篇教程Linux系统CentOS7上搭建HadoopHDFS集群详细步骤YARN集群和MapReduce原理及应用MapReduce是ApacheHadoop项目中的一种编程模型,用于大规模数据集的并行处理。在Hadoop中,MapReduce使用JavaAPI来编写Map和Reduce函数。API简......