题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

思路分析

  1. 利用三个指针,pre,p,pNext,将p的next指向前面的节点,注意反转之后的头节点。
  2. 头插法的思想,设置一个头结点,利用头插法建立链表

测试用例

  1. 功能测试:输入的链表含有多个节点;链表中只有一个节点。
  2. 特殊输入测试:链表头节点为nullptr指针。

Java代码

public class Offer24 {
public static void main(String[] args) {
test1();
test2();
test3();
} public static ListNode ReverseList(ListNode head) { return Solution1(head);
} private static ListNode Solution1(ListNode head) {
ListNode pReverseHead = null;
ListNode pre = null;
ListNode p = head;
ListNode pNext = null;
while (p != null) {
pNext = p.next;
if (pNext == null) {
pReverseHead = p;
}
p.next = pre;
pre = p;
p = pNext;
}
return pReverseHead;
} /**
* 利用头插法 的思想
*
* @param head
* @return
*/
private static ListNode Solution2(ListNode head) { ListNode pHead = new ListNode(-1);// 设置一个头结点;
pHead.next = null; // 头结点 next设置为null
ListNode p = head;
ListNode r = null; // 指向下一个节点
while (p != null) {
r = p.next;
p.next = pHead.next;
pHead.next = p;
p = r;
}
return pHead.next;
} private static void test1() {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
ListNode node6 = new ListNode(6); node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
System.out.println("反转之前");
ListNode.printListNode(node1);
System.out.println("反转之后");
ListNode reverseList = ReverseList(node1);
ListNode.printListNode(reverseList);
} private static void test2() {
ListNode node1 = new ListNode(1);
System.out.println("反转之前");
ListNode.printListNode(node1);
System.out.println("反转之后");
ListNode reverseList = ReverseList(node1);
ListNode.printListNode(reverseList);
} private static void test3() {
ListNode node1 = null;
System.out.println("反转之前");
ListNode.printListNode(node1);
System.out.println("反转之后");
ListNode reverseList = ReverseList(node1);
ListNode.printListNode(reverseList);
} }

代码链接

剑指Offer代码-Java

【Offer】[24] 【反转链表】的更多相关文章

  1. 剑指 Offer 24. 反转链表

    剑指 Offer 24. 反转链表 Offer 24 题目描述: 常规解法 本题的解法很常规,没有其他特别的坑,只需要将链表反转即可. package com.walegarrett.offer; / ...

  2. 【Java】 剑指offer(24) 反转链表

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头 ...

  3. 剑指Offer:反转链表【24】

    剑指Offer:反转链表[24] 题目描述 输入一个链表,反转链表后,输出新链表的表头. 解题分析 这道题我才发现我是属于那种真的笨,图都画出来了流程写不出来.看了别人的代码,总觉得自己差一步. 这也 ...

  4. 【剑指offer】面试题 24. 反转链表

    面试题 24. 反转链表

  5. 《剑指offer》 反转链表

    本题来自<剑指offer> 反转链表 题目: 输入一个链表,反转链表后,输出新链表的表头. 思路: 需要三个变量,来保存当前节点的,前面节点和反转后的节点. C++ Code: /* st ...

  6. 【剑指Offer】反转链表 解题报告(Python)

    [剑指Offer]反转链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...

  7. 【剑指Offer】面试题24. 反转链表

    题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3 ...

  8. 《剑指offer》面试题24. 反转链表

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...

  9. Go语言实现:【剑指offer】反转链表

    该题目来源于牛客网<剑指offer>专题. 输入一个链表,反转链表后,输出新链表的表头. Go语言实现: 迭代: /** * Definition for singly-linked li ...

  10. 剑指OFFER之反转链表(九度OJ1518)

    题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<= ...

随机推荐

  1. Hibernate 框架

    首先,我们先来了解一下什么是 Hibernate 框架. 什么是 Hibernate 框架? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO ...

  2. Extjs4 combobox hiddenName 后台取不到值

    当我们用 下拉框传值时,有一个问题,就是他有两个值,一个是用来显示的,一个是我们实际往后台需要传递的值,即 name 与 value 所以 combobox 才有了 hiddenName 这个属性,他 ...

  3. xpath定位的一些方法

  4. 【Java例题】7.2 线程题2-随机数求和线程

    2.随机数求和线程.设计一个线程子类,产生10000个随机数,并求和,显示和的结果:然后编写主类,在主函数中定义一个线程对象,并启动这个线程. package chapter7; public cla ...

  5. C#的委托事件总结

    什么是委托?1.委托是C#中由用户自定义的一个类型.2.类表示的是数据和方法的集合,而委托实际上是一个能持有对某个或某些方法的引用的类.3.与其他的类不同,委托类能拥有一个签名,并且他只能持有与他的签 ...

  6. 4、一个打了鸡血的for循环(增强型for循环)

    对于循环,我们大家应该都不陌生,例如do-while循环,while循环,for循环,今天给大家介绍一个有趣的东西——打了鸡血的for循环(增强型for循环). 首先看代码,了解一下for循环的结构: ...

  7. IDEA运行报错: Maven编译错误:不再支持源选项 5。请使用 6 或更高版本

    这里 记录下 这个问题的解决方案: 1:修改maven settings.xml 中的数据 这里的版本要对应现在使用的jdk版本 2:检查idea 配置 图中2块区域要一致 检查这块地方对应了自己的j ...

  8. React Native 混合开发与实现

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 随着 React 的盛行,其移动开发框架 React Native 也收到了广大开发者的青睐,以下简 ...

  9. 第一次Git使用以及码云(Gitee)

    下载安装Git,官网下载地址https://git-scm.com/downloads,我用的是Win10版,下载好后一路默认安装,安装时会给你自动添加环境变量,完成后打开cmd,输入git --ve ...

  10. 析构函数中调用 Dispose 报错 :Internal .Net Framework Data Provider error 1.[非原创]

    搜索MSDN的资源可以找到答案: 原文如下http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=473449&SiteID=1 以下是关于 ...