新建一个单链表l内存结构如图:

可见是带有3个node的list.

现在分析其逆置过程的内存结构变化,c++源码如下:

void reverse_4(list& l) {node* a = l.next;node* b = NULL;while (a->next != NULL){b = a->next;      //-->①a->next = b->next;  //-->②b->next = l.next;  //-->③l.next = b;           //-->④}
}

程序执行到①时的内存结构如图:

可见此时l的结构无变化,a截获了l.next,b截获了a->next,此时三者的结构为: a=0-1-2-N,b=1-2-N,l-0-1-2-N.

当程序执行到②时的内存结构如图:

可见将a->next与b->next嫁接的时候,l的第二个node也被影响,此时三者的结构变为: a=0-2-N,b=1-2-N,l-0-2-N.

当程序执行到③时的内存结构如图:

当程序执行到④时的内存结构如图:

可见这时候l.next=b=1-0-2-N.即一次循环得到的链表头节点结构只完成了前两个节点的逆置,且a->next->next=NULL,需要再循环一次完成全部逆置.

接下来第二次循环:

①:a=0-2-N,b=2-N,l.next=b=1-0-2-N

②:a=0-N,b=2-N,l-1-0-N                        //ab嫁接过程,l再次重新链接

③:a=0-N,b=2-1-0-N,l-1-0-N                 //已经完成三个节点的逆置

④:a=0-N,l.next=b=2-1-0-N                  //返回l的逆置,第二次循环结束

c++单链表逆置内存结构分析相关推荐

  1. c语言借助栈单链表逆置,借助栈实现单链表逆置--数据结构

    标题: 借助栈实现单链表逆置 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 用链式存储实现栈的初始化.入栈.出栈.取栈顶.判栈空等操作,在主函数中借助栈的基本 ...

  2. 7-14 单链表基础应用(4)--单链表逆置

    作者 chenmin 单位 福建工程学院 编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: (1) 根据输入信息创建单链表并输出所有结点信息.每个学生的信息包括姓名和成绩: (2) ...

  3. 借助于栈结构将一个单链表逆置

    借助于栈结构将一个单链表逆置. 输入输出样例:1组 #1 样例输入: 5 //链表中有几个元素 1 2 3 4 5 //链表中的元素分别是什么 样例输出: 5 4 3 2 1 //逆置后输出,利用栈结 ...

  4. C语言实现不带头结点的单链表逆置的三种方法

    C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...

  5. 7-4 单链表基础应用(4)--单链表逆置

    编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: (1) 根据输入信息创建单链表并输出所有结点信息.每个学生的信息包括姓名和成绩: (2) 将上一步创建的单链表逆置后并输出所有结点信 ...

  6. 单链表逆置:空间复杂度O(1)

    带头结点单链表逆置 从链表(带头结点)首个数据结点开始,重新头插法建表,将节点链接到头结点上 //单链表结点结构 typedef struct LNode {int data;struct LNode ...

  7. 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)

    带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...

  8. java数据结构之单链表逆置算法

    单链表逆置算法1 设计思想:在链表类中新加成员方法getNode(int i),用来获取指定位置的节点,新建一个空单链表,将原链表的每个节点按照从后往前的顺序依次取出,再把节点的数据依次添加到新的链表 ...

  9. 数据结构:单链表逆置

    实验要求: 写出将单链表逆置的算法.即令单链表的第一个结点变为最后一个结点,第二个结点变为倒数第二个结点,-,最后一个结点变为第一个结点. 依次从键盘读入数据,逆序建立链表L: 逆置链表L(创建新的链 ...

最新文章

  1. 小白的.Net Core 2.0 ConsoleApp入门(keng)指南(一)
  2. 8.MYSQL:触发器的使用[TRIGGER]
  3. ActionBarSherlock ViewPagerIndicator
  4. Windows 2003系统下桌面清理向导
  5. php cli 判断,php cli 命令行详解【转】
  6. 【Java】矩阵乘法的朴素算法
  7. MTK驱动开发(44)---如何对GPS下达清除辅助资讯的command
  8. 在此iphone上尚未受信任_来自苹果这样的电话千万别接,不然 iPhone 没了...
  9. python多分类画roc曲线_利用python制作ROC曲线进行多分类
  10. Win10系统装载ISO出现问题的解决方案
  11. COSCon'20 Apache Roadshow- China 精彩收官 | 数据篇
  12. MatLab的排序函数-sort
  13. 大型公司网路架构浅谈
  14. 人体模型 java代码_java3d人体模型.doc
  15. python爬微信公众号教程_python爬搜狗微信获取指定微信公众号的文章
  16. 诗词对仗常用字表(笠翁对韵)
  17. android软键盘和导航栏冲突,Android透明状态栏和软键盘配合的坑
  18. Android热修复Tinker原理分析
  19. 26岁那年,我创业了
  20. 跟海外大牌正面PK,中国品牌如何出圈?

热门文章

  1. 《随性集》:夜宴北城遇雨
  2. 计算机下方如何添加启动项,win7应用程序添加到开机启动项的两种解决办法
  3. 教你自由裁切每段视频的画面,横竖屏都支持
  4. 【日志】伯特兰-切比雪夫定理的小应用
  5. ARM编程中B指令与BL指令的区别
  6. c语言 10 -n次方,【零基础搞定C语言——10】
  7. 邮件设置 ssl://smtp.exmail.qq.com:465 can not connect to the SMTP server
  8. 吉他入门第二讲~~~~~左手弹奏基础
  9. RichView TRVStyle ParaStyles
  10. node_modules\node-sass: Command failed.错误解决