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

day4--链表内指定区间反转

迭代方法

1. 第m个节点的前一个节点pre和第n个节点;

2. 将第m个节点到第n个节点的链表部分反转;

3. 将pre节点的next指向反转后链表的头节点,将反转后链表的尾节点的next指向n+1节点。

/*** struct ListNode {*	int val;*	struct ListNode *next;* };*/#include <bits/types/struct_tm.h>
#include <cstddef>
class Solution {
public:/*** * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类*/ListNode* reverseBetween(ListNode* head, int m, int n) {// write code hereListNode *new_head=new ListNode(-1);//设置虚拟头节点ListNode *start, *tmp, *phead;new_head->next=head;//找到区间左端点phead=new_head;start=head;//start从第一个元素开始for(int i=1; i<m; i++){phead=start;start=start->next;}for(int j=1; j<=n-m; j++){tmp=start->next;start->next=tmp->next;tmp->next=phead->next;phead->next=tmp;}return new_head->next;}
};

设置虚拟头结点的作用

1. 简化链表操作

在链表操作中,如果不使用虚拟头结点,我们需要针对头节点和其他节点分别进行操作,这会导致代码的重复和冗余。而设置虚拟头结点后,我们可以将头节点和其他节点一视同仁,从而简化链表操作的实现。

2. 处理边界情况

当链表为空时,我们需要特殊处理头节点。如果使用虚拟头结点,我们可以省去这个特判,因为虚拟头结点始终存在。

3. 方便删除操作

在链表中,删除头节点时需要特殊处理。如果使用虚拟头结点,我们可以将虚拟头结点作为头节点的前一个节点,从而将删除头节点的操作转化为删除第二个节点的操作,避免了特判

4. 方便插入操作

在链表中,插入头节点时需要特殊处理。如果使用虚拟头结点,我们可以将虚拟头结点作为头节点的前一个节点,从而将插入头节点的操作转化为插入第二个节点的操作,避免了特判

综上所述,设置虚拟头结点可以简化链表操作的实现,同时可以避免特判和处理边界情况的麻烦。因此,在链表操作中,设置虚拟头结点是一个常见的技巧。

http://www.lryc.cn/news/89687.html

相关文章:

  • HTTP状态码是什么?常用的状态码有什么?
  • 【软件分析/静态分析】学习笔记01——Introduction
  • Java数组
  • 【数据库原理入门】
  • 练习Vue烘培坊项目
  • API测试| 了解API接口测试| API接口测试指南
  • 使用canvas给图片添加水印
  • 栈和队列的概念和实现
  • PostgreSQL 源码部署
  • 医疗IT系统安科瑞隔离电源装置在医院的应用
  • 高压放大器在3D打印中的应用
  • chatgpt赋能python:Python中的三角函数介绍
  • 异常检测论文1
  • linux搭建hadoop环境
  • 02 Maven创建及使用
  • 如何在 Rocky Linux 上检查磁盘空间?
  • 【软考系统规划与管理师笔记】第2篇 信息技术知识1
  • 【无标题】ELISA-3(加装跟踪装置)—让群体协作更智能!
  • Dubbo源码解析一服务暴露与发现
  • 有哪些工具软件一旦用了就离不开?
  • ObjectARX如何判断点和多段线的关系
  • 四、DRF序列化器create方法与update方法
  • 洛谷P8792 最大公约数
  • 【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用
  • MySQL主从同步(开GTID)
  • 打造精细化调研,这些产品榜上有名,你用了吗?
  • [golang gin框架] 37.ElasticSearch 全文搜索引擎的使用
  • 赋的几个发展阶段
  • Model-Free TD Control: Sarsa
  • CloudBase CMS的开发注意事项