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

简单链表反转

 

单链表翻转
// 定义单链表节点结构
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
};

// 反转单链表函数
ListNode* reverseList(ListNode* head) {
    ListNode* pre = nullptr;
    ListNode* next = nullptr;
    while (head != nullptr) {
        next = head->next;
        head->next = pre;
        pre = head;
        head = next;
    }
    return pre;
}
 

1. 节点结构定义:
在C++中,我们使用struct来定义单链表的节点结构。ListNode结构体包含一个int类型的成员变量val用于存储节点的值,以及一个指向ListNode的指针next用于指向下一个节点。

2. 反转函数:

• reverseList函数接受一个指向链表头节点的指针head作为参数。

• 初始化两个指针pre和next,pre初始化为nullptr,用于记录当前节点的前一个节点;next初始化为nullptr,用于暂存当前节点的下一个节点。

• 在while循环中,首先将head的下一个节点保存到next中,然后将head的next指针指向pre(实现反转),接着将pre更新为当前的head节点,最后将head更新为原来保存的next节点。

• 当循环结束时,pre指向的就是反转后的链表头节点,所以返回pre。

双链表反转


// 定义双链表节点结构
struct DoubleListNode {
    int value;
    DoubleListNode* last;
    DoubleListNode* next;
    DoubleListNode(int v) : value(v), last(nullptr), next(nullptr) {}
};

// 反转双链表函数
DoubleListNode* reverseDoubleList(DoubleListNode* head) {
    DoubleListNode* pre = nullptr;
    DoubleListNode* next = nullptr;
    while (head != nullptr) {
        next = head->next;
        head->next = pre;
        head->last = next;
        pre = head;
        head = next;
    }
    return pre;
}
 

1. 节点结构定义:
在C++中,DoubleListNode结构体定义了双链表的节点。它包含一个int类型的成员变量value用于存储节点的值,一个指向DoubleListNode的指针last用于指向前一个节点,以及一个指向DoubleListNode的指针next用于指向下一个节点。

2. 反转函数:

• reverseDoubleList函数接受一个指向双链表头节点的指针head作为参数。

• 初始化两个指针pre和next,pre初始化为nullptr,用于记录当前节点的前一个节点;next初始化为nullptr,用于暂存当前节点的下一个节点。

• 在while循环中,首先将head的下一个节点保存到next中,然后将head的next指针指向pre(实现正向指针的反转),接着将head的last指针指向原来保存的next节点(实现反向指针的反转),再将pre更新为当前的head节点,最后将head更新为原来保存的next节点。

• 当循环结束时,pre指向的就是反转后的双链表头节点,所以返回pre。

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

相关文章:

  • 【无标题】跨网段耦合器解决欧姆龙CJ系列PLC通讯问题案例
  • HTML 插件学习笔记
  • 996引擎-生肖(首饰盒)
  • 关于testng.xml无法找到类的问题
  • 从入门到入土,SQLServer 2022慢查询问题总结
  • Linux进程信号:【什么是信号】【产生信号】【保存信号】【捕捉信号】【可重入函数】【volatile】【SIGGHLD】
  • R语言、BIOMOD2丨物种分布模型研究进展与挑战
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的文件上传与下载:实现文件管理功能
  • 使用Docker快速部署Dify
  • 智能导视:引领未来导航的创新力量
  • Pytorch 第十三回:神经网络编码器——自动编解码器
  • Linux内核优化
  • [高级数据结构]线段树SegmentTree
  • 监控易一体化运维:高性能与易扩展,赋能运维新高度
  • 37-Openwrt 使用wpa_supplicant实现sta
  • Linux网络相关概念和重要知识(5)(对会话和表示层的理解、网络计算器的实现)
  • 冷门预警,013英超焦点战:利物浦VS埃弗顿,红军主场迎战太妃糖,德比夜暗藏玄机
  • .NET 使用 WMQ 连接Queue 发送 message 实例
  • 机器视觉--python基础语法
  • 【Pandas】pandas DataFrame dtypes
  • zk基础—3.集群与核心参数一
  • 深度学习查漏补缺:4.数据分布的度量
  • 从零掌握 Playwright:用 Python 玩转现代浏览器自动化
  • 阿里云文生视频或图生视频Prompt提示词设计与优化
  • 特殊图判断
  • 【论文笔记】Llama 3 技术报告
  • SQL 语言基础:分组集(Grouping Sets)、CUBE 和 ROLLUP
  • blender二次元上色
  • TypeScript:环境安装与配置全指南
  • HTTP keepalive 详解