输入一个链表,反转链表后,输出链表的所有元素。
解题思路:
用三个指针分别指向当前结点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中的新式类与旧式类的一些基于descriptor的概念(上)
  2. 设置tomcat的默认jdk
  3. 解决:adb 提示adb server version(31) doesn‘t match this client(41) 解决办法
  4. asp网页设计流量统计代码
  5. scrapy框架-post使用
  6. 计算机三级之嵌入式系统学习笔记2
  7. c语言gs迭代法解方程,ex1_7-GS迭代法例题源程序及注释.pdf
  8. Iocomp for .net/wpf the Crack
  9. Set集合练习题02
  10. C语言在线词典项目—Linux
  11. 全国计算机自动化办公专业人才证书,办公自动化证书有什么用
  12. 程序员容易的疾病之干眼症(治疗篇)
  13. 最炫python表白代码_python炫酷烟花表白源代码
  14. PowerBI-时间智能函数-SAMEPERIODLASTYEAR
  15. Vue复刻华为官网 (二)
  16. AD1256之STM32程序——STM32测试高精度ADC篇(四)
  17. word怎么转pdf原格式不变?可以试试这个途径
  18. knex 找不到mysql_转义knex mysql查询语句
  19. pycharm调试服务器代码
  20. jdk、openjdk、jre、jvm、jep、jar、jmod

热门文章

  1. python起多进程服务_python 多进程详细总结
  2. C语言获取linux接口状态,[linux] C语言Linux系统编程-TCP通信的11种状态
  3. python 运行时 变量_在运行时在python中检索变量的名称?
  4. 小程序素材抓取软件_小程序上新丨2020冬季产品图库更新,海量素材随你用!...
  5. 分辨率_电视分辨率多少合适
  6. React:Redux简介
  7. 面向对象(Python):学习笔记之继承
  8. Git:本地Git仓库连接码云并新建分支提交
  9. ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
  10. ML/DL-复习笔记【一】- 数学基础(线性代数、概率论、数值分析)