1. // 面试题24:反转链表
  2. // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的
  3. // 头结点。
  4.  
  5. #include <iostream>
  6. #include "List.h"
  7.  
  8. ListNode* ReverseList(ListNode* pHead)
  9. {
  10. ListNode* pReversedHead = nullptr;//设置三个节点变量,第一是已经被反转的头节点(原链表尾节点)
  11. ListNode* pNode = pHead;//第二个是当前节点
  12. ListNode* pPrev = nullptr;//第三是原链表中当前节点的前一个节点
  13. while (pNode != nullptr)
  14. {
  15. ListNode* pNext = pNode->m_pNext;//pNext是原链表中当前节点的后一个节点
  16.  
  17. if (pNext == nullptr)
  18. pReversedHead = pNode;
  19.  
  20. pNode->m_pNext = pPrev;
  21.  
  22. pPrev = pNode;
  23. pNode = pNext;
  24. }
  25.  
  26. return pReversedHead;
  27. }
  28.  
  29. // ====================测试代码====================
  30. ListNode* Test(ListNode* pHead)
  31. {
  32. printf("The original list is: \n");
  33. PrintList(pHead);
  34.  
  35. ListNode* pReversedHead = ReverseList(pHead);
  36.  
  37. printf("The reversed list is: \n");
  38. PrintList(pReversedHead);
  39.  
  40. return pReversedHead;
  41. }
  42.  
  43. // 输入的链表有多个结点
  44. void Test1()
  45. {
  46. ListNode* pNode1 = CreateListNode();
  47. ListNode* pNode2 = CreateListNode();
  48. ListNode* pNode3 = CreateListNode();
  49. ListNode* pNode4 = CreateListNode();
  50. ListNode* pNode5 = CreateListNode();
  51.  
  52. ConnectListNodes(pNode1, pNode2);
  53. ConnectListNodes(pNode2, pNode3);
  54. ConnectListNodes(pNode3, pNode4);
  55. ConnectListNodes(pNode4, pNode5);
  56.  
  57. ListNode* pReversedHead = Test(pNode1);
  58.  
  59. DestroyList(pReversedHead);//这都不忘删,你是魔鬼吗
  60. }
  61.  
  62. // 输入的链表只有一个结点
  63. void Test2()
  64. {
  65. ListNode* pNode1 = CreateListNode();
  66.  
  67. ListNode* pReversedHead = Test(pNode1);
  68.  
  69. DestroyList(pReversedHead);
  70. }
  71.  
  72. // 输入空链表
  73. void Test3()
  74. {
  75. Test(nullptr);
  76. }
  77.  
  78. int main(int argc, char* argv[])
  79. {
  80. Test1();
  81. Test2();
  82. Test3();
  83. system("pause");
  84. return ;
  85. }

《剑指offer》第二十四题(反转链表)的更多相关文章

  1. 剑指Offer面试题:15.反转链表

    一.题目:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 链表结点定义如下,这里使用的是C#描述: public class Node { public in ...

  2. 【剑指offer 面试题16】反转链表

    思路: 用三个指针preNode.curNode.nextNode完成. #include <iostream> using namespace std; struct ListNode ...

  3. C++版 - 剑指offer 面试题16:反转链表(Leetcode 206: Reverse Linked List) 题解

    面试题16:反转链表 提交网址: http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId= ...

  4. 剑指Offer(书):反转链表

    题目:输入一个链表,反转链表后,输出新链表的表头. 分析:要分清他的前一个节点和后一个节点,开始的时候前节点为null,后节点为head.next,之后,反转. public ListNode Rev ...

  5. 【剑指offer】面试题 24. 反转链表

    面试题 24. 反转链表

  6. 《剑指offer》面试题16 反转链表 Java版

    (输入链表的头节点,反转链表) 书中方法:对于一个链表,我们只能从头往后遍历,如果要反转,我们需要更改当前节点的next域指向前一个节点,此时链表断开,为了能继续修改下一个节点的next域,我们还要维 ...

  7. 【剑指Offer】面试题24. 反转链表

    题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3 ...

  8. 《剑指offer》面试题24. 反转链表

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...

  9. 《剑指offer》第四题(二维数组中的查找)

    // 二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组 ...

  10. 剑指offer五十四之字符流中第一个不重复的字符

    一.题目 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

随机推荐

  1. UNDFTD x Nike Air Max 97 OG Black

    The UNDFTD x Nike Air Max 97 OG Black is releasing way sooner than anticipated. This collaborative r ...

  2. 软件包管理:rpm命令管理-校验和文件提取

    校验主要用于判断文件是否做了更改 修改标志: 会用-V,会看输出结果即可. 当有误操作,比如删了某一个文件,只需知道他属于哪一个rpm包,可用提取找回覆盖就行.并不把整个rpm包安装,而是提取其中的某 ...

  3. Junit4用法

    序号 方法和描述 1 void assertEquals(boolean expected, boolean actual) 检查两个变量或者等式是否平衡 2 void assertTrue(bool ...

  4. 【week6】团队贡献分

    小组名称:nice! 小组成员:李权 于淼 杨柳 刘芳芳 项目内容:约跑app 完成任务:   10% 20% 70% 好   于淼 李权 中   刘芳芳 杨柳 差       1.李权8.4 2.于 ...

  5. 【转】Redis之发布 订阅模式

    本例包括 jedis_demo:入口类 jedis_control:jedis控制器(jedis的连接池) jedis_pub_sub_listener:订阅的监听器 singleton_agent: ...

  6. 如何禁用MySql总是定时弹出一个MySQLInstallerConsole.exe的窗口

    如何禁用MySql总是定时弹出一个MySQLInstallerConsole.exe的窗口 禁用mysql总是弹出一个安装框的定时任务这一条安装命令,Installing MySQL 5.6.21 u ...

  7. 短网址(short URL)系统的原理及其实现

    短网址(short URL)系统的原理及其实现 https://hufangyun.com/2017/short-url/?hmsr=toutiao.io&utm_medium=toutiao ...

  8. mysql多实例安装与ssl认证

    mysql多实例安装有两种形式: 同一数据库版本的多实例安装. 不同数据库版本的多实例安装. 同一数据库的多实例安装: 在同一台机器上安装4台mysql数据库实例. 从官网下载MySQL5.6版本的二 ...

  9. Linux学习笔记之如何让普通用户获得ROOT权限

    在学习sodu的时候,我发现一些命令只能由root用户使用,普通用户使用会提示此用户没有使用sudo的权限.我想到的解方法是把正在使用的普通用户获得root权限,于是我通过百度和询问老师知道了如何去实 ...

  10. P3501 [POI2010]ANT-Antisymmetry

    P3501 [POI2010]ANT-Antisymmetry 二分+hash 注意:答案超出int范围 ------------ 先拿一个反对称串来做栗子:010101 我们可以发现 0101(左边 ...