Java反转链表,简单算法

这篇具有很好参考价值的文章主要介绍了Java反转链表,简单算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Java 单向链表,指的是一种数据结构,用于存储一系列的元素。每个元素包含两部分:一个存储数据的值和一个指向下一个元素的引用。

单向链表由多个节点组成,每个节点都包含一个数据元素和一个指向下一个节点的引用。
链表的起始节点称为头节点,尾节点的引用为空(null)。
每个节点通过指针(引用)连接在一起,形成链表的结构。
Java反转链表,简单算法,Java-基础,java,链表,算法

一、题目

描述:
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

数据范围:
0 ≤ n ≤ 000
要求:空间复杂度 O(1) ,时间复杂度 O(n) 。

如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
以上转换过程如下图所示:
Java反转链表,简单算法,Java-基础,java,链表,算法

二、答案

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode ReverseList(ListNode head) {
        if(null == head) return null;
        ListNode newList = null;
        while (head != null) {
            ListNode temp = head.next; //临时存储,并移位
            head.next = newList;//当前节点指向上一个节点
            newList = head;//指针后移更新新链表
            head = temp;//指针后移更新旧链表
        }
        return newList;
    }

}

三、我的解决思路

链表的操作是一个挪指针的过程。这是一个单向链表,next是指向下一个节点的方法。
这个题的基本思路就是:不断获取下一个节点放到末尾。
不看代码,先搞个清楚逻辑:
1.默认链表head:1,2,3
2. head.next:2,3

现在我想要获取1,放到next后边就可以完成第一步了。
解决方案就是给默认链表的next置空就搞定了。新建一个链表newList

3.ListNode newList = null;head.next=newList;

这时候默认链表head变成:1

4.此刻head.next:null

到目前为止就反转了第一步了。
但是发现3没了,那处理方案就是搞个临时链表存着next就可以了,这个需要再最开始就操作,不然		到这块3已经没了。

0.临时链表temp=head.next:2,3

5.将head给到newList就完成第一步了:newList = head,newList --> 1

下面还得继续操作head,但是head中只有1是不行的,所以将临时链表给到head。

6.head=temp,head:2,3

依次往复:

0.temp:3
1.head:2,3
2.head.next:3
3.head.next = newList;head:2,1
4.newList = head;newList:2,1
5.head = temp;head:3

再来一次:
0.temp:空
1.head:3
2.head.next:空
3.head.next = newList;head:3,2,1
4.newList = head;newList:3,2,1
5.head = temp;head:空

while判断head不空,此刻head为空了,跳出循环,反转结束。

return newList;

总结

单链表反转是一个基础的算法问题,通常可以通过迭代或递归两种方法来解决。迭代法的时间复杂度为 O(n),空间复杂度为 O(1);递归法的时间复杂度为 O(n),空间复杂度为 O(n)。在实际应用中,应根据具体情况选择合适的解法。文章来源地址https://www.toymoban.com/news/detail-798734.html

到了这里,关于Java反转链表,简单算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA数组元素反转的三种写法------JAVA入门基础教程

    int[] arr = new int[]{34,54,3,2,65,7,34,5,76,34,67}; for(int i = 0;i arr.length/2;i++) {     int temp = arr[i];     arr[i] = arr[arr.length - 1 - i];     arr[arr.length - 1 - i] = temp; } for(int i = 0;i arr.length;i++) {     System.out.print(arr[i] + \\\"t\\\"); } System.out.println(); //互换方法2 int[] newArr = new int[arr.length]; for(int i = arr.l

    2023年04月17日
    浏览(45)
  • 算法-设计链表、移除链表元素、反转链表

    伪装成一个老手! 设计一个单链表,其中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 实现 MyLinkedList 类: MyLinkedList()初始化 MyLinkedList 对象。 int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1

    2024年02月11日
    浏览(97)
  • 【算法】链表反转

    给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。 数据范围: 要求:空间复杂度 ,时间复杂度 。 如当输入链表{1,2,3}时, 经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。 每次反转需要修改两个

    2024年02月12日
    浏览(40)
  • 【算法手记03】反转链表

    反转链表很重要,是链表题中的高频考点,部分题目可能还需要将反转链表抽出来作为一个函数使用。这几种方式都必须熟练手搓。 lc206.给定单链表头结点,给出反转后的链表。 反转后的新链表带一个dummy结点,将原链表的结点依次插入dummy结点之后,即可完成反转。过程大

    2024年02月19日
    浏览(31)
  • 【数据结构和算法】反转链表

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:迭代(双指针) 2.2 方法二:递归 三、代码 3.1 方法一:迭代(双指针) 3.2 方法二:递归 四、复杂度分析 4.1 方法一:迭代

    2024年01月18日
    浏览(53)
  • 【算法入门&链表】【模板】链表|反转链表|合并排序链表|删除链表的节点

    ✅作者简介:热爱后端语言的大学生,CSDN内容合伙人 ✨精品专栏:C++面向对象 🔥系列专栏:算法百炼成神 本专栏收录的均为牛客网的算法题目,内含链表、双指针、递归、动态规划、基本数据结构等算法思想的具体运用。牛客网不仅有大量的经典算法题目,也有大厂的面

    2024年02月17日
    浏览(60)
  • 算法通关村第二关——链表反转

    链表反转,就是链表原来是1-2-3-4-5,经过反转处理过后变成5-4-3-2-1 处理链表反转,有两种方式,一个是建立虚拟头结点,一个是直接操作链表反转。  这是执行的流程 最核心的两行就是 直接想我要让她反转,我现在设立了虚拟头结点,那我就要让新加进这个反转链表的结点

    2024年02月13日
    浏览(37)
  • 数据算法之反转链表(五种方法)

    题目描述 : 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 提示代码: 这道题来自力扣的第206题,今天我们尝试使用五种不同的方法来实现链表的反转。 第一种方法也是最容易想到的方法,就是将我们链表中的

    2024年02月03日
    浏览(34)
  • 算法村第二关(1)——手写链表反转

    题目:Leetcode-206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 对于链表反转的问题,想起来其实非常简单。 就是从前往后,将节点一个一个采用头插法的做成一个新链表嘛,这样新链表就是旧链表的反转链表啦! 那既然这么简单,为什么还要学

    2024年02月14日
    浏览(40)
  • 算法通关村第二关,终于学会反转链表!

    文章目录 一、反转链表 总结 提示:以下是本篇文章正文内容,下面案例可供参考 反转链表主要是用三个指针,一个指针指向空,一个指向head第一个节点,一个在循环做的临时变量,在循环设置这个指针不用考虑head为空的情况,然后在循环改变指向后,向前移动一步,然后

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包