LeetCode 206 反转链表
时间:2019-04-19
本文章向大家介绍LeetCode 206 反转链表,主要包括LeetCode 206 反转链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题思路:
1、迭代方法,从前往后扫描一遍,以此改变当前指针p的指向,其中用到三个指针,当前指针p,上一指针last,头指针pHead。
2、递归方法,一层一层的递归到最后一个节点,再以此返回改变指向。
代码:
解法1:迭代
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseList(ListNode* head) { 12 if(!head || !head->next) 13 return head; 14 ListNode* pHead = head; 15 ListNode* p = pHead->next; 16 ListNode* pre = (ListNode*)malloc(sizeof(ListNode)); 17 pre->next = head; 18 ListNode* last = head; 19 while(p) 20 { 21 last->next = p->next; 22 p->next = pHead; 23 pHead = p; 24 p = last->next; 25 } 26 return pHead; 27 } 28 };
解法2:递归
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverse(ListNode* pHead, ListNode* last) 12 { 13 ListNode* ans; 14 if(pHead->next != NULL) 15 ans = reverse(pHead->next, pHead); 16 else 17 ans = pHead; 18 pHead->next = last; 19 return ans; 20 } 21 ListNode* reverseList(ListNode* head) { 22 if(!head || !head->next) 23 return head; 24 ListNode* ans; 25 ans = reverse(head, NULL); 26 return ans; 27 } 28 };
- Tensorflow实践:用神经网络训练分类器
- 理解闭包 js回收机制
- java 解析 XML实例
- Java 线程内异常处理
- Raphael path 拖动实现
- 黑猿大叔-译文 | TensorFlow实现Batch Normalization
- Java后端WebSocket的Tomcat实现
- jwplayer 隐藏属性方法记载
- TensorFlow从0到1丨开篇:Hello TensorFlow !
- JS原型继承和类式继承
- 在Servlet的init方法中创建线程
- TensorFlow从0到1丨第2篇:TensorFlow核心编程
- AngularJS中的按需加载ocLazyLoad
- AngularJS driective 封装 自动滚动插件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Js递归
- scrollReveal实现网页重复动画效果
- ElementUI实现Upload文件上传服务器交互
- swiper.animate实现轮播展示动画效果
- 微信小程序子组件向父组件传值
- Css文字环绕圆形图片
- 微信小程序处理图片加载失败显示默认图片
- Dart环境配置和运行
- 微信小程序之间跳转及传参
- Spring源码学习笔记(2)——Bean的加载
- Css实现聊天框
- 机器学习之KNN原理与代码实现
- Dart常用的数据类型
- Vue版本更新清除浏览器缓存
- maven:Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenC