Node* p1  p2  p3

思路:开始时,p1为NULL,p2=phead,p3=p2—>next。使p2—>next = p1,然后使p1=p2,p2=p3。如果只有1个结点则此时p2为NULL,结束循环;否则继续执行,直到p2为NULL。

注意:注意代码鲁棒性!判断头结点为NULL;如果只有一个结点。

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Node
  5. {
  6. public:
  7. Node(int v, Node* n)
  8. {val = v;
  9. next = n;}
  10. ~Node(){}
  11. int val;
  12. Node* next;
  13. };
  14. Node * phead = NULL;
  15. Node * pReverseHead = NULL;
  16.  
  17. void AddNode(int val)
  18. {
  19. Node* pnode = new Node(val,NULL);
  20. //Node one_node(val,NULL); 这里有大bug!如果这样写,在函数退出时自动调用析构函数!链表就乱了!
  21. if(phead == NULL)
  22. {
  23. phead = pnode;
  24. }
  25. else
  26. {
  27. Node* p = phead;
  28. while(p->next != NULL)
  29. {
  30. p = p->next;
  31. }
  32. p->next = pnode;
  33. }
  34. }
  35. void PrintLink()
  36. {
  37. Node* p = phead;
  38. while(p != NULL)
  39. {
  40. int temp = p->val;
  41. cout<<temp<<endl;
  42. p = p->next;
  43. }
  44. }
  45. void PrintLinkReverse()
  46. {
  47. Node* p = pReverseHead;
  48. while(p != NULL)
  49. {
  50. int temp = p->val;
  51. cout<<temp<<endl;
  52. p = p->next;
  53. }
  54. }
  55. Node* ReverseLink()
  56. {
  57. Node* pPrev = NULL;
  58. Node* pNode = phead;
  59. Node* pNext;
  60. if(phead == NULL) return NULL;
  61. while(pNode != NULL)
  62. {
  63. pNext = pNode->next;
  64. if(pNext == NULL)
  65. {
  66. pReverseHead = pNode;
  67. }
  68.  
  69. pNode->next = pPrev;
  70. pPrev = pNode;
  71. pNode = pNext;
  72.  
  73. }
  74. return pReverseHead;
  75. }
  76. int main()
  77. {
  78. int val;
  79. cin>>val;
  80. while(val != )
  81. {
  82. AddNode(val);
  83. cin>>val;
  84. }
  85. PrintLink();
  86. Node* pReverseHead = ReverseLink();
  87. cout<<"Reverse:"<<endl;
  88. PrintLinkReverse();
  89. return ;
  90. }

《剑指offer》面试题16—反转链表的更多相关文章

  1. 剑指Offer:面试题16——反转链表(java实现)

    问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...

  2. 剑指Offer - 九度1518 - 反转链表

    剑指Offer - 九度1518 - 反转链表2013-11-30 03:09 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试 ...

  3. 剑指Offer面试题:14.链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  4. 剑指offer 面试题35.复杂链表的复制

    时间O(N),空间O(N) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomList ...

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

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

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

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

  7. 剑指Offer面试题16(Java版):反转链表

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 解决与链表相关的问题总是有大量的指针操作.而指针操作的代码总是easy出错的. 非常多的面试官喜欢出链表相关的问题,就是 ...

  8. 剑指offer(15)反转链表

    题目描述 输入一个链表,反转链表后,输出链表的所有元素. 题目分析 至少需要三个指针pPre(指向前一个结点).pCurrent(指向当前的结点,在代码中就是pHead).pPnext(指向后一个结点 ...

  9. 剑指offer十五之反转链表

    一.题目 输入一个链表,反转链表后,输出链表的所有元素. 二.思路 详细分析见代码注释 三.代码 public class Solution {     public ListNode Reverse ...

  10. 剑指offer——面试题16:数值的整数次方

    // 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需 ...

随机推荐

  1. project 2013 激活 key 7YHNW-RVCQY-VBDB2-QX69Q-B96WK viso 66DNF-28W69-W4PPV-W3VYT-TJDBQ

    project 2013 激活 key :7YHNW-RVCQY-VBDB2-QX69Q-B96WK viso2013  激活 key:66DNF-28W69-W4PPV-W3VYT-TJDBQ 软件 ...

  2. 关于erlang中的timer:tc/3

    timer:tc/3对于统计函数运行时间是个很不错的函数, 截图timer:tc/1,tc/2,tc/3的API: 拿斐波那契数列入手做个讲解: -module(fib). -export([fib/ ...

  3. 学习某些API的方法

    学习某些 API 的方法 这里的 API 可能是某个系统平台,开发包,开发平台,开发工具等等,因为任何系统和技术方法提供给开发者的打包方式都是一系列 API . 无论你有在哪一层级开发,从硬件驱动到系 ...

  4. XML解析PULL

    解析xml是很经常使用的操作,除了SAX和DOM两种最经常使用的解析xml外,Pull解析器解析XML文件. 在Android的源代码中大量的使用Pull解析.pull不仅更加的面相对象,并且使用速度 ...

  5. 从S3中导入数据到Dynamodb

    本节如果你已经从Dynamodb中导出过数据,而且导出的文件以及被存入S3.文件内部结构会在Verify Data Export File 中描写叙述. 我们称之前导出数据的原始表为source ta ...

  6. mongodb 安装、启动

    MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1   最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据 ...

  7. TTimer很特殊

    TTimer = class(TComponent) private FInterval: Cardinal; FWindowHandle: HWND; FOnTimer: TNotifyEvent; ...

  8. JVM无法启动,jps无法运行,提示内存不足

    原因:系统设置中有设置了不允许over commit so,无法分配足够内存 /etc/sysctl.conf vm.overcommit_memory=1    或者sysctl vm.overco ...

  9. jQuery事件函数位置放置的两种方法

    jQuery 事件函数 jQuery 事件处理方法是 jQuery 中的核心函数. 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法. 通常会把 jQuery 代码放到 <head& ...

  10. javascript Date对象的介绍及linux时间戳如何在javascript中转化成标准时间格式

    1.Date对象介绍 Date对象具有多种构造函数.new Date()new Date(milliseconds)new Date(datestring)new Date(year, month)n ...