博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】反转链表,C++实现(链表)
阅读量:5993 次
发布时间:2019-06-20

本文共 1281 字,大约阅读时间需要 4 分钟。

1.题目

  • 输入一个链表的头结点,首先反转链表后,然后输出链表的所有元素()。
struct ListNode {	int val;	struct ListNode *next;};

2.思路

# 反转链表

  辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。

  翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。

# 鲁棒性

  • 空链表
  • 有一个节点的链表
  • 有多个节点的链表

3.code

1 /*  2 struct ListNode {  3     int val;  4     struct ListNode *next;  5     ListNode(int x) :  6             val(x), next(NULL) {  7     }  8 };*/  9 class Solution { 10 public: 11     ListNode* ReverseList(ListNode* pHead) 12     { 13         // 反转指针 14         ListNode* pNode=pHead;  // 当前节点 15         ListNode* pPrev=nullptr;// 当前节点的上一个节点 16         ListNode* pNext=nullptr;// 当前节点的下一个节点 17         ListNode* pReverseHead=nullptr;//新链表的头指针 18  19         // 反转链表 20         while(pNode!=nullptr) 21         { 22             pNext=pNode->next; // 建立链接 23            24             if(pNext==NULL)    // 判断pNode是否是最后一个节点 25                 pReverseHead=pNode; 26  27             pNode->next=pPrev; // 指针反转 28             pPrev=pNode; 29             pNode=pNext; 30         } 31         return pReverseHead; 32     } 33 };

  

转载于:https://www.cnblogs.com/wanglei5205/p/8572458.html

你可能感兴趣的文章
【电子书】C++编程开发30问
查看>>
IntelliJ IDEA For Mac 快捷键
查看>>
React 世界的一等公民 - 组件
查看>>
阿里云ACP认证详细笔记(一)
查看>>
Java Web学习计划
查看>>
EZ430 Chronos 如何提高开发调试效率探讨
查看>>
终极解决方案:Emacs+Slime+Lisp启动错误:Polling "/tmp/slime.50
查看>>
mysql 配置文件样例
查看>>
闲暇处才是生活
查看>>
Mysql中查询速度的优化
查看>>
ES6中this的三种用法
查看>>
Quartz指南
查看>>
java Math类中的pow方法的问题Math.pow(64,1/3)是1而不是4
查看>>
要出去找工作了,看看多线程和并行的区别及什么时候该用
查看>>
蔡先生论道大数据十九:王羲之与大数据
查看>>
3DES加密
查看>>
时光穿越_电脑时间显示为2011年6月1日
查看>>
c#每日小结 <八>
查看>>
[转]Git详解之五 分布式Git
查看>>
centos6.4下LVS+keepalived的高可用(LVS/DR模式)
查看>>