思路:

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

 #include <iostream>
 using namespace std;

 struct ListNode
 {
     int val;
     ListNode *next;
     ListNode():val(v), next(NULL){}
 };

 ListNode* reverseList(ListNode **pListhead)
 {
     //条件不加也不会出错,突出边界测试的想法
     if(*pListhead == NULL)
         return NULL;
     if((*pListhead)->next == NULL)
         return *pListhead;

     ListNode *preNode = NULL;
     ListNode *curNode = *pListhead;
     ListNode *reverseHead = NULL;

     while(curNode != NULL)
     {
         ListNode *nextNode = curNode->next;

         if(nextNode == NULL)
         {
             reverseHead = curNode;
         }

         curNode->next = preNode;

         preNode = curNode;
         curNode = nextNode;
     }

     return reverseHead;
 }

 int main()
 {
     ListNode *head = );
     ListNode *phead = head;

     ; i < ; i++)
     {
         ListNode *temp = new ListNode(i);
         phead->next = temp;
         phead = phead->next;
     }

     cout<<"原始链表: ";
     ListNode *print = head;
     while(print != NULL)
     {
         cout<<print->val<<" ";
         print = print->next;
     }
     cout<<endl;

     cout<<"反转链表: ";
     ListNode *rehead = reverseList(&head);
     while(rehead != NULL)
     {
         cout<<rehead->val<<" ";
         rehead = rehead->next;
     }
 }

测试结果:
原始链表:
反转链表:          

【剑指offer 面试题16】反转链表的更多相关文章

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

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

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

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

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

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

  4. 【剑指offer 面试题15】链表中倒数第K个结点

    思路: 定义两个指针同时指向head,第一个指针先走K-1步,随后二个指针同时移动,当第一个指针到末尾处时,第二个指针所指向的即为倒数第K个结点. #include <iostream> ...

  5. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  6. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  7. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  8. 剑指offer面试题5 从头到尾打印链表(c)

  9. 剑指offer面试题5 从头到尾打印链表(java)

    注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...

随机推荐

  1. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  2. POJ2104 K-th Number(主席树)

    题目 Source http://poj.org/problem?id=2104 Description You are working for Macrohard company in data s ...

  3. LoadRunner:视频教程、课件

    LoadRunner 视频教程地址: 51 自学网LoadRunner入门视频教程 (这个网站的网址粘不上来,可能与博客园有过节吧)视频中的课件下载地址:链接: http://pan.baidu.co ...

  4. Oracle 11g RAC停止和启动步骤

    关闭前备份控制文件/参数文件:   sqlplus / as sysdba alter database backup controlfile to '/home/oracle/control.ctl ...

  5. sql问题集合

    1.sqlparameter @ 写在from前面

  6. vs2012+qt5.2.0环境搭建

    1.安装vs2012: 2.下载Qt 5.2.0 for Windows 32-bit(VS 2012, 579 MB) 和 Visual Studio Add-in 1.2.2for Qt5 注意: ...

  7. swift 中delegate的使用

    今天写了delegate,遇到以下问题: 这里protocol的写法有问题,如果delegate指向一个实现了某个协议对象的引用,在oc里是这样写delegate的类型 id<protocol& ...

  8. iOS NSString中字符串的删除,替换

  9. iOS - 混合开发

    5.oc 与 js 混合开发 PhoneGap 专门做混合开发的,已经被另一个公司收购. WebViewJavascriptBridge 国内用的比较多 混合开发的好处:跨平台性.H5开发的时间成本, ...

  10. JAVA static 作用

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...