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

每日算法题【链表】:移除链表元素、反转链表

(6)删除链表中等于给定值的所有结点
  • 203. 移除链表元素 - 力扣(LeetCode)

  • 解题思路:

    创建一个新链表,将不等于这个值的节点都尾插到新链表当中,最后返回新链表

    /**
    * Definition for singly-linked list.
    * struct ListNode {
    *     int val;
    *     struct ListNode *next;
    * };
    */
    typedef struct ListNode ListNode;
    //创建新链表,将值不等于val的尾插到新链表
    struct ListNode* removeElements(struct ListNode* head, int val) {//创建一个新链表ListNode * newHead,*newTail;newHead = newTail = NULL;//循环遍历原链表找不同节点ListNode* cur = head;while(cur){//找值不为val的尾插到新链表当中if(cur->val != val){//链表为空if(newHead == NULL){newHead = newTail = cur;}else{//链表不为空newTail->next = cur;//尾插newTail = newTail->next;//newtail向后移动一个节点}}cur = cur->next;}//确保新链表的最后一个节点的next指针为NULL,避免可能的多余链接。if(newTail){newTail->next = NULL;}return newHead;
    }
    

(7)反转一个单链表
  • [206. 反转链表 - 力扣(LeetCode)]:

  • 解题方法一:

    取原链表中的节点,然后头插到newhead新链表中

    /*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*///取原链表中的节点,然后头插到newhead新链表中
    struct ListNode* reverseList(struct ListNode* head) {struct ListNode * cur = head;struct ListNode * newhead = NULL;//循环遍历取出链表节点while(cur){//先拿到cur->nextstruct ListNode* next = cur->next;//进行头插cur->next = newhead;//newhead指向新的头结点newhead = cur;//接着遍历原链表的下一个节点cur = next;}return newhead;
    }
    
  • 解题思路二:

    1. 每次迭代中,将当前节点n2next指针指向前驱节点n1,实现反转
    2. 然后三个指针向前移动:
      • n1移动到当前n2的位置
      • n2移动到n3的位置
      • 如果n3不为空,n3移动到它的下一个节点
    3. n2为空时(即已经处理完所有节点),循环结束
    4. 最后返回n1,它现在指向反转后的新头节点
    struct ListNode* reverseList(struct ListNode* head) {//如果传入的链表头指针head为空,直接返回NULL,因为空链表不需要反转if(head == NULL){return NULL;}struct ListNode* n1,*n2,*n3;n1 = NULL;n2 = head;n3 = head->next;while(n2){//翻转n2->next = n1;//迭代往后走n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;
    }
    
http://www.dtcms.com/a/346191.html

相关文章:

  • 嵌入式第三十五课!!Linux下的网络编程
  • 非标机械设备工厂,一般会遇到哪些问题
  • Linux服务器查看启动服务的5种方法
  • 基于RBAC的权限控制:从表设计到接口实现全指南
  • Beszel 服务器监控平台使用教程
  • JVM虚拟机
  • Leetcode—1683. 无效的推文【简单】
  • 网络与信息安全有哪些岗位:(7)等级保护测评师
  • tensorflow-gpu 2.7下的tensorboard与profiler插件版本问题
  • 第九章 Leaflet 实战:多边形绘制工具开发与面积实时计算(含双击报错修复方案)
  • Qt QML实现 无边框圆角窗口拖动(附窗口控制按钮)
  • RAG初筛方案实例验证-多种BM25方案
  • 类器官培养基系列,助力高效医学研究
  • Navicat连接MySQL-出现1045无法连接问题
  • AI实验管理神器:WandB全功能解析
  • 【python】os.mkdir() 和 os.makedirs()区别
  • 数学建模-灰色关联分析
  • map_set
  • Trie 树(字典树)
  • Rust 入门 注释和文档之 cargo doc (二十三)
  • 51单片机-中断系统
  • 【数据分享】各省及全国GDP增长指数(1980-2022)
  • 彻底解决 Windows 文件扩展名隐藏问题,注册表修改显示文件后缀方法
  • More Effective C++ 条款01:仔细区别 pointers 和 references
  • 构建城市数字孪生底座:深度解析智慧城市全景视频拼接融合解决方案
  • constraint_mode使用
  • 【Python】两条命令永久切国内源
  • Android 16环境开发的一些记录
  • C语言中的CSI_START和CSI_END宏
  • 拿到手一个前端项目,应该如何启动