LeetCode算法题-Reverse Linked List(Java实现)
这是悦乐书的第192次更新,第195篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206)。反转单链表。例如:
输入:1-> 2-> 3-> 4-> 5
输出:5-> 4-> 3-> 2-> 1
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
先利用递归函数,进入到最后一个节点的位置,此时需要反转指针所指向的引用方向,比如原来是n(k)-->n(k+1),现在需要反转过来变成n(k+1)-->n(k),此时需要n(k).next.next = n(k),将n(k+1)的下一个节点指向n(k),同时需要将原来n(k)节点的下一个节点指向null,即n(k).next = null。如果不指向null,会形成环,造成死循环。
public ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode p = reverseList(head.next);head.next.next = head;head.next = null;return p;
}
03 第二种解法
在遍历列表时,将当前节点的下一个指针更改为指向其上一个元素。由于节点没有引用其前一个节点,因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。最后返回新的链表。
public ListNode reverseList2(ListNode head) {ListNode result = null;ListNode current = head;while (current != null) {ListNode pre = current.next;current.next = result;result = current;current = pre;}return result;
}
04 第三种解法
利用HashMap,依次遍历head节点,将下一个节点作为key、当前节点作为value存入其中,直到其最后一个节点。新创建一个节点指向head的最后一个节点,然后开始从map中取出key所对应的value作为新节点的下一个节点。
public ListNode reverseList3(ListNode head) {if (head == null || head.next == null) {return head;}HashMap<ListNode, ListNode> nodeMap = new HashMap<>();ListNode curr = head;int leng = 0;while (curr.next != null) {nodeMap.put(curr.next, curr);++leng;curr = curr.next;}ListNode newHead = curr;for (int i = 0; i < leng; i++) {curr.next = nodeMap.get(curr);curr = curr.next;}curr.next = null;return newHead;
}
05 第四种解法
使用栈,借助其先进后出的特点,先将head的每一个节点入栈,然后新建一个节点res,每次出栈的节点,获取其节点值val,然后创建新的节点作为res的下一个节点。
public ListNode reverseList4(ListNode head) {if (head == null || head.next == null) {return head;}Stack<ListNode> stack = new Stack<>();while (head != null) {stack.push(head);head = head.next;}ListNode res = new ListNode(-1);ListNode temp = res;while (!stack.isEmpty()) {temp.next = new ListNode(stack.pop().val);temp = temp.next;}return res.next;
}
06 第五种解法
此解法与第四种解法思路类似,只不过是将栈换成了数组,然后新建node节点,以数组最后一位元素作为节点值,然后开始循环处理每个新的节点。
public ListNode reverseList5(ListNode head) {if (head == null || head.next == null) {return head;}ArrayList<Integer> list = new ArrayList<Integer>();while (head != null) {list.add(head.val);head = head.next;}ListNode node = new ListNode(list.get(list.size()-1));ListNode last = node;for (int i=list.size()-2; i >= 0; i--) {ListNode temp = new ListNode(list.get(i));last.next = temp;last = last.next;}return node;
}
07 小结
算法专题目前已连续日更超过一个月,算法题文章51+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
转载于:https://www.cnblogs.com/xiaochuan94/p/10068914.html
LeetCode算法题-Reverse Linked List(Java实现)相关推荐
- LeetCode算法题-Nth Digit(Java实现)
这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...
- LeetCode算法题-Design LinkedList(Java实现)
这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...
- LeetCode算法题-Number Complement(Java实现-五种解法)
这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...
- LeetCode算法题-Detect Capital(Java实现)
这是悦乐书的第251次更新,第264篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第118题(顺位题号是520).给定一个单词,你需要判断其中大写字母的使用是否正确.当下 ...
- leetcode算法题--Reverse Words in a String
原题链接:https://leetcode.com/problems/reverse-words-in-a-string/ class Solution {public:string reverseW ...
- LeetCode算法题-Valid Palindrome II(Java实现)
这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...
- LeetCode算法题-Convert a Number to Hexadecimal(Java实现)
这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...
- LeetCode算法题-Minimum Depth of Binary Tree(Java实现)
这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...
- LeetCode算法题-K-diff Pairs in an Array(Java实现)
这是悦乐书的第254次更新,第267篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第121题(顺位题号是532).给定一个整数数组和一个整数k,您需要找到数组中唯一的k- ...
最新文章
- 大数据教程(13.6)sqoop使用教程
- 20151026c#2
- LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)
- 远程mysql定时删除数据_mysql定时备份数据库 删除历史文件 将备份数据库传送到另外服务器...
- 【PyTorch】contiguous==>保证Tensor是连续的,通常transpose、permute 操作后执行 view需要此方法
- 推荐一条高效的Python爬虫学习路径!
- UE4学习-阶段性总结1
- 转:vSphere 7简介:混合云的功能和技术
- 腾讯再开源三项技术,提升企业开发及运营效率
- 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
- 乐优商城项目实战系列2
- adc0808模数转换实验报告_adc0808模数转换电路图及程序
- Overfeat模型(滑动窗口)
- python re sub用法_python re模块常见使用方法整理
- html表格纵向变横向,html表格,表头竖向固定,横向滚动的例子
- 数据结构知识点全面总结—精华版
- 手机、浏览器的分辨率、状态栏参数
- 1405:三元一次方程
- 不吹不黑,网络安全工程师年薪30万是真的吗?
- 西部数据硬盘第一次启动很慢