《剑指offer》面试题16——反转链表(C++)
输入一个链表,反转链表后,输出链表的所有元素。
解题思路:
用三个指针分别指向当前结点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++)相关推荐
- 剑指offer面试题[16]-反转链表
题目描述 输入一个链表,反转链表后,输出链表的所有元素. 解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的的.很多面试官喜欢出链表相关的问题,就是想通过指针操作来考查应聘者的编 ...
- 剑指Offer - 面试题24. 反转链表(遍历/递归)
1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...
- 剑指offer面试题24. 反转链表(双指针)
题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 思路 详见链接 代码 class Solution:def reverseList(self, head:ListN ...
- 【重点 递归版】剑指offer——面试题16:反转链表
剑指offer--面试题16:反转链表 牛客网上有<剑指offer>的题目训练https://www.nowcoder.com/activity/oj 一个有关此题图文并茂的博客:http ...
- 剑指offer——面试题56:链表中环的入口
剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...
- [剑指offer]面试题16:反转链表
面试题16:反转链表 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点.链表结点定义如下: struct ListNode {int value;ListNode *nex ...
- 【剑指offer-Java版】16反转链表
反转链表:此处为了符合题意就不设置头结点了 思路简单直接,遍历一遍即可 需要注意的地方: 输入异常:空或者只有一个结点 public class _Q16 {public ListNode Rever ...
- 剑指offer(15)反转链表
反转链表就是 先把当前节点所指向的原节点存起来,这里用tmp表示,此时tmp的值为2: 然后使当前节点指向前一个节点(cur.next=pre),然后将当前节点的值赋给pre(pre=cur):再然后 ...
- [剑指offer]面试题15:链表中倒数第k个结点
面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...
- 《剑指Offer》24:反转链表
题目 定义一个函数,输入一个链表的头节点,反转链表并输出反转后链表的头节点.链表节点定义如下: public static class ListNode{public int val;public L ...
最新文章
- python输入字符串从大到小排列_791. 自定义字符串排序(Python)
- python:多线程
- Why gdb crash if create too many threads ?
- C Tester Doer Pattern
- leetcode53. 最大子数组和(暴力+贪心)
- Linux查看进程并重启服务命令
- go interface类型转换_Go语言的九大核心特性主要有哪些?
- java poi导出excel模板_Java poi实现导出excel,添加数据有效性,生成模板
- 六石风格文档范例:做测试结果表格
- linux下罗技摄像头采集图片,linux下寻找罗技摄像头快看酷讯版驱动
- bcnf分解算法_BCNF范式及其分解方法(对一次Lab作业的总结)
- 【DP + 思维】A Question of Ingestion Gym - 101673G
- Kindle:电子书资源
- 基于SSM框架的借阅图书管理系统
- idea项目老是重启_idea反复重启服务器
- python hdf5_使用Python将大量数字写入HDF5文件
- 小混混n多天不提编程,深刻反思
- vue项目添加百度统计
- (附源码)电影选座订票app 毕业设计 011439
- Docker下安装MCR windows镜像安装Matlab 静默安装MCR silent install 无交互安装 无Gui安装 控制台安装
热门文章
- 短信转移到另一个手机接收_如何将iPhone手机接收短信同步到另外一台设备上?...
- weblogic安装部署 linuxs——wls1036版本
- php错误日志框架,错误与日志 - Laravel - 为 WEB 艺术家创造的 PHP 框架。
- linux拨号日志,Linux系统日志管理:(1)连接时间日志
- 21. Django进阶:内建用户系统
- C#:获得本机IP地址
- C#:判断某个对象有没有某个键的方法
- EChart:EChart与NProgress结合异步加载数据
- Javascript:创建对象的方式
- 使用Cmder替换cmd,让你的开发飞起来