逆序一个链表常用方法有以下几种

  • 就地逆置
  • 头插法

先初始化一个链表

struct ListNode
{int val;ListNode *next;ListNode(int x) : val(x), next(NULL){}
};ListNode a(10);
ListNode b(20);
ListNode c(30);
ListNode d(40);
ListNode e(50);a.next = &b;
b.next = &c;
c.next = &d;
d.next = &e;ListNode *head = &a;

使用循环逆置链表(常规)【也叫 就地逆置法】

int main()
{// 打印旧的节点while(head){cout << head->val << " " << head->next << endl ;head = head->next;}head = &a;                            // 重置到头结点// 开始逆序ListNode *next = nullptr;ListNode *new_head = nullptr;// for(int i = 0; i < 5; ++i)         // 需要知道有几个节点while(head){next = head->next;              // 备份head 得 next的节点head->next = new_head;           // 断开当前节点,并 和 已经逆序的链接, 形成新的 链表new_head = head;               // 更新 新的链表head = next;                 // head 获取剩余 节点}head = new_head;// 打印逆序后的节点while(head){cout << head->val << " " << head->next << endl ;head = head->next;}return 0;
}

头插法

// 打印旧的节点
while(head)
{cout << head->val << " " << head->next << endl ;head = head->next;
}
head = &a;// 开始逆序
ListNode *next = nullptr;
ListNode tmp_head(0);
while(head)
{next = head->next;head->next = tmp_head.next;tmp_head.next = head;head = next;
}head = tmp_head.next;
while(head)
{cout << head->val << " " << head->next << endl ;head = head->next;
}

两种方法的比较:

数据结构(链表逆序)相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  2. 数据结构:链表逆序输出

    数据结构(一):链表逆序输出 题目描述:创建一个链表,并将链表逆序输出,链表中以输入0作为结束 关键代码详解: 附:全部代码 #include<stdio.h> #include<s ...

  3. c语言实现链表的逆序输出,C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  4. 数据结构:闲敲棋子落灯花之链表逆序输出Reverse

    链表逆序输出 首先,我们需要了解,逆序输出不是把数据对应位置改变,而是仅仅改变链接顺序. 方法一:迭代链表.使用循环,遍历链表,每一步,反转一个链接. 方法二:递归. 方法一: 过程:先使第一个结点指 ...

  5. 【数据结构】链表逆序

    一.题目描述 已知一个链表的结点结构为: struct Node {int data;Node *next; }; typedef struct Node Node; 已知链表的头结点head,写一个 ...

  6. c语言将一个已知头结点的单链表逆序_C语言实现单链表逆序与逆序输出实例

    单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序.本文就分别实例讲述一下两种方法.具体如下: 1.逆序输出 实例代码如下: #include #include #inc ...

  7. 链表逆序——就地逆序

    链表逆序 1.问题描述 给定一个带头结点的单链表,请将其逆序.即如果单链表原来为head->1->2->3->4->5->6->7,则逆序后变为head-&g ...

  8. c语言递归链表逆序,链表逆序的递归实现

    链表逆序是个很基础的算法,考察的是指针操作和基本数据结构.常规的写法当然是OK的,不过要是还会写出一个递归的链表逆序算法,那别人肯定要给你点个赞了. 1 问题描述 给定一个链表,请将其逆序.即如果链表 ...

  9. c语言 链表倒序,C语言链表逆序方法技巧

    C语言链表逆序方法技巧 C语言有丰富的数据结构和运算符.包含了各种数据结构,如整型.数组类型.指针类型和联合类型等,用来实现各种数据结构的运算.下面是小编为大家搜索整理的C语言链表逆序方法技巧,希望大 ...

  10. C语言的单链表逆序和指定范围逆序

    文章目录 前言 逆序 指定范围逆序 源码实现 前言 关于链表的逆置,是考察对链表指针的理解.知道了如何不实用额外空间,同时使用O(n)复杂度对链表进行逆序之后将会对链表有好理解. 同时关于如何在指定范 ...

最新文章

  1. 温故而知新,6位顶级CV科学家聚首:计算机视觉中的深度学习方法vs传统方法...
  2. 使用Netty,我们到底在开发些什么?
  3. 服务器监控系统的介绍,客户服务系统服务器监控系统
  4. 单元测试(Unit Test)学习
  5. jzoj6276-[Noip提高组模拟1]树【线段树,扫描线,倍增】
  6. 【转载】关于 Google Chrome 中的全屏模式和 APP 模式
  7. python数据生成pdf,Python生成pdf文件的方法
  8. sequelize 左连接 left join_SparkSQL连接查询中的谓词下推处理(下)
  9. 您的设备不支持googleplay服务_google play下载-google play下载安卓
  10. Python 爬虫从入门到进阶之路(四)
  11. java--小示例:-2:优化版本,多个文件的调用。
  12. 因为计算机中丢失lua.dll,lua51.dll丢失修复
  13. appcan注册功能php,appcan是什么
  14. 【课程设计】基于图像处理的一维条形码识别-含matlab源码
  15. SCOM2019安装监控代理
  16. android 5.0 wifi移植,android  wifi移植
  17. HTML中设置行高的属性是,line-height属性(行高标签用法)
  18. 浮点运算单元FPU能给电机控制带来什么?
  19. 服务器托管和服务器租用的区别
  20. 名创优品“超级能打”背后的平价主义与飞轮效应

热门文章

  1. 一部好看的香港电视剧街坊财爷
  2. 简单瞎搞题(简单dp)
  3. 在2022年想创业就一定要注册公司吗?
  4. 基于modprobe_path的内核提权方法
  5. B.FRIENDit壁虎忍者:一只好的电竞耳机,你看得出来吗?
  6. 秒开iptv方案轻松解决群众看电视卡顿问题
  7. VUE:在VUE中实现效果换一换功能
  8. HDU 2066 一个人的旅行 【floyd】
  9. Rasa课程、Rasa培训、Rasa面试系列 金融银行案例Bot 多种状态转换-转账及信用卡支付
  10. 【技术史】《互联网发展史》 作者:禅与计算机程序设计艺术GPT-4