输入一个链表,反转链表后,输出链表的所有元素。
解题思路:
用三个指针分别指向当前结点pPrev,前结点pNode,后结点pNext。
如果当前结点为尾结点(当前结点的后结点为空时),则新的头结点指向该结点;
否则: 当前结点的指针指向前结点(指针反向)、前指针后移、当前指针后移。

#include<iostream>using namespace std;
struct ListNode {int val;struct ListNode *next;
};void MYPrint(ListNode *p)   //打印链表
{while(p!=NULL){cout<<p->val<<" ";p=p->next;}cout<<endl<<endl;return;
}ListNode* ReverseList( ListNode* pHead)
{ListNode * pReverseHead=NULL;   //新定义的结点,用于指向尾结点,作为反转后的头结点ListNode * pNode = pHead;  //当前结点ListNode * pPrev = NULL;   //当前结点的前结点while(pNode!=NULL){ListNode *pNext=pNode->next;   //当前结点的下一个结点if(pNext==NULL)    //如果当前结点的下一个结点为空,则为尾结点。。即反转后的链表的头结点pReverseHead=pNode;pNode->next=pPrev;   //当前结点不是尾结点,则将当前结点指针指向前结点(方向反向)pPrev=pNode;   //指针右移pNode=pNext;}return pReverseHead;
}int main()
{
int myarray[]={1,2,3,4,5,6,7};int num=sizeof(myarray)/sizeof(int);//将数组myarray中的内容传递给链表//链表ListNode *head,*p,*lins,*newHead;  //首先建立一个头指针head指向链表的最开始。。当链表还没有建立的时候头指针为空。head=NULL;    //头指针初始为空for(int i=0; i<=num-1; i++){//建立一个结点,并用临时指针p指向这个结点。p = new ListNode ;p->val = myarray[i];   //将数据存储到当前结点的data域中p->next = NULL;    //设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空。if(head==NULL){head=p;   //如果这是第一个创建的结点,则将头指针指向这个结点}else{lins->next=p; //如果这不是第一个创建的结点,则将上一个结点的后继指针指向当前结点}lins=p;  //指针lins也指向当前结点.}cout<<"链表内容为:"<<endl;MYPrint(head);cout<<"反转后链表内容为:"<<endl;newHead=ReverseList(head);MYPrint(newHead);return 0;
}

运行结果为:

链表内容为:
1 2 3 4 5 6 7反转后链表内容为:
7 6 5 4 3 2 1

《剑指offer》面试题16——反转链表(C++)相关推荐

  1. 剑指offer面试题[16]-反转链表

    题目描述 输入一个链表,反转链表后,输出链表的所有元素. 解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的的.很多面试官喜欢出链表相关的问题,就是想通过指针操作来考查应聘者的编 ...

  2. 剑指Offer - 面试题24. 反转链表(遍历/递归)

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

  3. 剑指offer面试题24. 反转链表(双指针)

    题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 思路 详见链接 代码 class Solution:def reverseList(self, head:ListN ...

  4. 【重点 递归版】剑指offer——面试题16:反转链表

    剑指offer--面试题16:反转链表 牛客网上有<剑指offer>的题目训练https://www.nowcoder.com/activity/oj 一个有关此题图文并茂的博客:http ...

  5. 剑指offer——面试题56:链表中环的入口

    剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...

  6. [剑指offer]面试题16:反转链表

    面试题16:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.链表结点定义如下: struct ListNode {int value;ListNode *nex ...

  7. 【剑指offer-Java版】16反转链表

    反转链表:此处为了符合题意就不设置头结点了 思路简单直接,遍历一遍即可 需要注意的地方: 输入异常:空或者只有一个结点 public class _Q16 {public ListNode Rever ...

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

    反转链表就是 先把当前节点所指向的原节点存起来,这里用tmp表示,此时tmp的值为2: 然后使当前节点指向前一个节点(cur.next=pre),然后将当前节点的值赋给pre(pre=cur):再然后 ...

  9. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

  10. 《剑指Offer》24:反转链表

    题目 定义一个函数,输入一个链表的头节点,反转链表并输出反转后链表的头节点.链表节点定义如下: public static class ListNode{public int val;public L ...

最新文章

  1. python输入字符串从大到小排列_791. 自定义字符串排序(Python)
  2. python:多线程
  3. Why gdb crash if create too many threads ?
  4. C Tester Doer Pattern
  5. leetcode53. 最大子数组和(暴力+贪心)
  6. Linux查看进程并重启服务命令
  7. go interface类型转换_Go语言的九大核心特性主要有哪些?
  8. java poi导出excel模板_Java poi实现导出excel,添加数据有效性,生成模板
  9. 六石风格文档范例:做测试结果表格
  10. linux下罗技摄像头采集图片,linux下寻找罗技摄像头快看酷讯版驱动
  11. bcnf分解算法_BCNF范式及其分解方法(对一次Lab作业的总结)
  12. 【DP + 思维】A Question of Ingestion Gym - 101673G
  13. Kindle:电子书资源
  14. 基于SSM框架的借阅图书管理系统
  15. idea项目老是重启_idea反复重启服务器
  16. python hdf5_使用Python将大量数字写入HDF5文件
  17. 小混混n多天不提编程,深刻反思
  18. vue项目添加百度统计
  19. (附源码)电影选座订票app 毕业设计 011439
  20. Docker下安装MCR windows镜像安装Matlab 静默安装MCR silent install 无交互安装 无Gui安装 控制台安装

热门文章

  1. 短信转移到另一个手机接收_如何将iPhone手机接收短信同步到另外一台设备上?...
  2. weblogic安装部署 linuxs——wls1036版本
  3. php错误日志框架,错误与日志 - Laravel - 为 WEB 艺术家创造的 PHP 框架。
  4. linux拨号日志,Linux系统日志管理:(1)连接时间日志
  5. 21. Django进阶:内建用户系统
  6. C#:获得本机IP地址
  7. C#:判断某个对象有没有某个键的方法
  8. EChart:EChart与NProgress结合异步加载数据
  9. Javascript:创建对象的方式
  10. 使用Cmder替换cmd,让你的开发飞起来