《剑指Offer》24:反转链表
题目
定义一个函数,输入一个链表的头节点,反转链表并输出反转后链表的头节点。链表节点定义如下:
public static class ListNode{public int val;public ListNode next;public ListNode(int val) {this.val = val;}
}
分析
方法一:使用三个指针进行边移动边逆。
方法二:利用栈先进后出的性质进行反转链表。
放码
import java.util.LinkedList;
import com.lun.util.SinglyLinkedList.ListNode;public class ReverseList {//三指针操作public ListNode reverse(ListNode head){if(head == null) {return head;}ListNode a = head;ListNode b = a.next;ListNode c = null;while(a != null) {//真正改变转向a.next = c;//开始移位c = a;a = b;if(b != null)b = b.next;}return c;}//利用栈的先进后出性质public ListNode reverse2(ListNode head) {if(head == null) {return null;}LinkedList<ListNode> stack = new LinkedList<>();ListNode p = head;while( p != null) {stack.push(p);p = p.next;}ListNode result = stack.pop(), temp = null;;p = result;while(!stack.isEmpty()) {temp = stack.pop();temp.next = null;//防止最后元素死循环而造成的OOMp.next = temp;p = p.next;}return result;}}
测试
import static org.junit.Assert.*;import org.junit.Test;import com.lun.util.SinglyLinkedList;
import com.lun.util.SinglyLinkedList.ListNode;public class ReverseListTest {@Testpublic void testReverse() {ReverseList rl = new ReverseList();ListNode raw = SinglyLinkedList.intArray2List(new int[] {1, 2, 3, 4, 5, 6, 7});ListNode expected = SinglyLinkedList.intArray2List(new int[] {7, 6, 5, 4, 3, 2, 1});assertTrue(SinglyLinkedList.equals(rl.reverse(raw), expected));//---raw = SinglyLinkedList.intArray2List(new int[] {1});expected = SinglyLinkedList.intArray2List(new int[] {1});assertTrue(SinglyLinkedList.equals(rl.reverse(raw), expected));//---raw = SinglyLinkedList.intArray2List(new int[] {1, 2});expected = SinglyLinkedList.intArray2List(new int[] {2, 1});assertTrue(SinglyLinkedList.equals(rl.reverse(raw), expected));//---assertNull(rl.reverse(null));}@Testpublic void testReverse2() {ReverseList rl = new ReverseList();ListNode raw = SinglyLinkedList.intArray2List(new int[] {1, 2, 3, 4, 5, 6, 7});ListNode expected = SinglyLinkedList.intArray2List(new int[] {7, 6, 5, 4, 3, 2, 1});//System.out.println(SinglyLinkedList.print(rl.reverse2(raw)));assertTrue(SinglyLinkedList.equals(rl.reverse2(raw), expected));//---raw = SinglyLinkedList.intArray2List(new int[] {1});expected = SinglyLinkedList.intArray2List(new int[] {1});assertTrue(SinglyLinkedList.equals(rl.reverse2(raw), expected));//---raw = SinglyLinkedList.intArray2List(new int[] {1, 2});expected = SinglyLinkedList.intArray2List(new int[] {2, 1});assertTrue(SinglyLinkedList.equals(rl.reverse2(raw), expected));//---assertNull(rl.reverse2(null));}}
《剑指Offer》24:反转链表相关推荐
- 《LeetCode力扣练习》剑指 Offer 24. 反转链表 Java
<LeetCode力扣练习>剑指 Offer 24. 反转链表 Java 一.资源 题目: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1-& ...
- 【LeetCode】剑指 Offer 24. 反转链表
剑指 Offer 24. 反转链表 文章目录 剑指 Offer 24. 反转链表 一.迭代 二.递归 总结 一.迭代 在遍历链表时,将当前节点的 next 指针改为指向前一个结点.由于结点没有引用其前 ...
- 【双100%解法】剑指 Offer 24. 反转链表
立志用最少的代码做最高效的表达 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: ...
- 剑指offer 24. 反转链表
1.问题描述 输入一个链表的头结点,反转链表后,输出新链表的表头. 2. 解决思路 1)链表是空的:直接返回空的头结点: 2)链表中只有一个结点:直接返回原头结点: 3)链表中有大于2个以上的结点:需 ...
- 剑指 Offer 24.反转链表
题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 题目链接:反转链表 示例: 输入: 1->2->3->4->5->NULL 输出: 5-& ...
- Leetcode 剑指 Offer 24. 反转链表 (每日一题 20210823)
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.示例:输入: 1->2->3->4->5->NULL 输出: 5->4->3-> ...
- 剑指 Offer 24. 反转链表(C语言)
**定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3- ...
- 【算法】剑指 Offer 24. 反转链表
1.概述 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof 定义一个函数,输入一个链表的头节点, ...
- 剑指 Offer 24. 反转链表java
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3-&g ...
- 剑指Offer 24 反转链表
迭代的思想就是利用pre和cur两个指针,然后逐步向后遍历 # Definition for singly-linked list. # class ListNode: # def __init__( ...
最新文章
- MATH6005 Final Assignment MATH6005 2018-19
- ajax更新,AJAX网址更新(AJAX URL update)
- linux目录为root所有文件,linux获取文件所有目录/文件夹的例子linux操作系统 -电脑资料...
- 神经网络与定态薛定谔方程
- 跨部门不配合工作_作为管理者,如何解决跨部门成员互不配合的情况?
- Linux系统编程26:进程间通信之进程间通信的基本概念
- 在线CSV转SQL工具
- systemtap打点方法
- win10 任务管理器显示GPU占用率
- 两个平面的位置关系和判定方程组解_必修二数学课后题答案
- 关于ESP8266和ESP8285的对比
- 爬取新浪微博热搜排行
- 51智能小车前进后退左右旋转
- 基于cefsharp的浏览器应用开发(支持XP系统)
- ucache灾备云报价_UCache云灾备体系介绍
- websocket连接不稳定_帮你解决WiFi卡顿:拒绝连接不稳定、网速慢
- 苹果一体机安装windows7教程
- blackberry j2me 发送SMS短信
- 音速启动vstart 目录作用详解
- 【听】跟任何人都聊得来,如何打破沟通障碍
热门文章
- 设计模式C++实现(6)——适配器模式
- 计算机辅助项目管理课程方案,天津大学计算机辅助管理研究生课程简介
- redis php怎么使用教程,PHP 使用redis
- k近邻算法_K近邻(knn)算法是如何完成分类的?
- 鸿蒙os开源邀请全球开发者,全场景无缝连接 鸿蒙OS开源邀请全球开发者共助生态发展...
- 英特网rst服务器未在运行,技术员示范win7系统提示“英特尔(R)RST服务未在运行”的详细办法...
- python中回车怎么表示_如何在python中使用读取行仅拆分回车符?
- SqlServer学习之触发器
- 04751计算机网络安全讲解,【19份】04751计算机网络安全自考试卷_历年真题自考答案及解析_湖南080901计算机科学与技术(原B080702计算机及应用)专业-自考生资料网...
- sqoop(数据迁移工具)-安装-学习