思路:

  用三个指针preNode、curNode、nextNode完成。

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct ListNode
  5. {
  6. int val;
  7. ListNode *next;
  8. ListNode(int v = ):val(v), next(NULL){}
  9. };
  10.  
  11. ListNode* reverseList(ListNode **pListhead)
  12. {
  13. //条件不加也不会出错,突出边界测试的想法
  14. if(*pListhead == NULL)
  15. return NULL;
  16. if((*pListhead)->next == NULL)
  17. return *pListhead;
  18.  
  19. ListNode *preNode = NULL;
  20. ListNode *curNode = *pListhead;
  21. ListNode *reverseHead = NULL;
  22.  
  23. while(curNode != NULL)
  24. {
  25. ListNode *nextNode = curNode->next;
  26.  
  27. if(nextNode == NULL)
  28. {
  29. reverseHead = curNode;
  30. }
  31.  
  32. curNode->next = preNode;
  33.  
  34. preNode = curNode;
  35. curNode = nextNode;
  36. }
  37.  
  38. return reverseHead;
  39. }
  40.  
  41. int main()
  42. {
  43. ListNode *head = new ListNode();
  44. ListNode *phead = head;
  45.  
  46. for(int i = ; i < ; i++)
  47. {
  48. ListNode *temp = new ListNode(i);
  49. phead->next = temp;
  50. phead = phead->next;
  51. }
  52.  
  53. cout<<"原始链表: ";
  54. ListNode *print = head;
  55. while(print != NULL)
  56. {
  57. cout<<print->val<<" ";
  58. print = print->next;
  59. }
  60. cout<<endl;
  61.  
  62. cout<<"反转链表: ";
  63. ListNode *rehead = reverseList(&head);
  64. while(rehead != NULL)
  65. {
  66. cout<<rehead->val<<" ";
  67. rehead = rehead->next;
  68. }
  69. }
  70.  
  71. 测试结果:
  1. 原始链表:
  2. 反转链表:

【剑指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(Java版):反转链表

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

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

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

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

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

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

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

随机推荐

  1. 02 - Tomcat配置

    Tomcat配置 本文内容 介绍 Windows UNIX daemon 1.介绍 首选看Tomcat目录下的RUNNING.TXT 2.Windows平台下 可以选择下载windows instal ...

  2. nmap使用详解

    nmap是一个网络探测和安全扫描程序, 系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息.nmap支持很多扫描技术,例如:UDP.TCP connect(). ...

  3. 无法将 grub-efl-amd64-signed 软件包安装/target/ 中

    64位win7下U盘安装64位ubuntu12.04,出现[无法将 grub-efl-amd64-signed 软件包安装/target/ 中]的错误 1. 已经确认为 12.04.2 的 Bug B ...

  4. QAQ高精度模板笔记√

    #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #i ...

  5. ASP.NET并发处理

    http://blog.csdn.net/hliq5399/article/details/6280288

  6. Java学习笔记之:Java流程控制

    一.介绍 Java流程控制包括顺序控制.条件控制和循环控制. 顺序控制,就是从头到尾依次执行每条语句操作.条件控制,基于条件选择执行语句,比方说,如果条件成立,则执行操作A,或者如果条件成立,则执行操 ...

  7. iOS 用命令实现简单的打包过程

    `xcode-select --print-path`/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication // 获得打包 ...

  8. 源代码Log

    MVC5源代码 https://github.com/aspnet/Mvc MVC4源代码 http://aspnetwebstack.codeplex.com/

  9. 4、处理方法中获取请求参数、请求头、Cookie及原生的servlet API等

    1.请求参数和请求头 使用@RequestParam绑定请求参数,在处理方法的入参处使用该注解可以把请求参数传递给请求方法 —— value :参数名 —— required : 是否必须,默认为tr ...

  10. Entity Framework学习 - 2.增删改查

    1.增加数据 PirateBayEntities db = new PirateBayEntities(); T_Tests test = new T_Tests(); test.Name = &qu ...