广告
返回顶部
首页 > 资讯 > 精选 >Java​逆转单向链表怎么实现
  • 676
分享到

Java​逆转单向链表怎么实现

2023-06-04 08:06:59 676人浏览 独家记忆
摘要

这篇文章主要讲解了“Java逆转单向链表怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java逆转单向链表怎么实现”吧!首先这是一个单向的链表,不同于 Java 里面的 Linked

这篇文章主要讲解了“Java逆转单向链表怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java逆转单向链表怎么实现”吧!

首先这是一个单向的链表,不同于 Java 里面的 LinkedList,它是双向的链表。链表中每个节点之间通过 next 指针串接起来,会有一个链表头和链表尾指针 hold 住整个链表。逆转的任务就是将 head -> a -> b -> c -> d <- tail 变成 head -> d -> c -> b -> a <- tail。

链表结构表示



class node<T> {
    T value;
    Node<T> next;

    Node(T value) {
        this.value = value;
    }
}

class ReverseLinkedList<T> {
  Node<T> head, tail;
}

链表构造器

我们需要将所有的元素一个一个的使用 next 指针串接起来,链表的头尾节点要用 head 和 tail 变量把持住。加入新元素时,需要调整尾部节点的 next 指针,指向新加入的元素节点。

class ReverseLinkedList<T> {
  private Node<T> head, tail;

  public ReverseLinkedList(T... values) {
    for (T value : values) {
        if (tail == null) {
            // 第一个节点
            head = tail = new Node<>(value);
        } else {
            // 后面的节点往链表尾部追加
            Node<T> oldTail = tail;
            oldTail.next = tail = new Node<>(value);
        }
    }
  }
}

ReverseLinkedList<Integer> l = new ReverseLinkedList<>(1,2,3,4,5,6);

链表内容呈现

我们需要提供一个链表的输出方法,以便快速对比逆转后链表的内容是否正确


class ReverseLinkedList<T> {
  private Node<T> head, tail;

  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append('[');
    Node<T> cur = head;
    while (cur != null) {
        sb.append(cur.value);
        cur = cur.next;
        if (cur != null) {
            sb.append(',');
        }
    }
    sb.append(']');
    return sb.toString();
  }
}

迭代逆转算法

循环调整 next 指针是最容易想到的方法,但是要将指针精确地逆转正确其实并不容易。下面代码中的循环部分很短,但是却很精致,使用了三个临时局部变量 cur、next 和 nextnext,稍有不慎就会出错。

当我写完下面这段代码时,虽然可以正常运行出期望的结果,但是总当心哪里会有遗漏,是不是什么地方少了个 if else,这就是编写算法代码时常见的心理状态。

class ReverseLinkedList<T> {
  private Node<T> head, tail

  public ReverseLinkedList<T> reverseByLoop() {
    // 空链表或者单元素都无需处理
    if (head == tail) {
        return this;
    }
    Node<T> cur = head;
    Node<T> next = cur.next;
    while (next != null) {
        Node<T> nextnext = next.next;
        next.next = cur;
        cur = next;
        next = nextnext;
    }
    tail = head;
    tail.next = null;
    head = cur;
    return this;
  }
}

递归逆转算法

使用递归的思想来解决这个问题也是一个很好的主意,只不过当链表特别长时,调用栈会很深,链表长到一定程度就会抛出臭名昭著的异常 StackOverflowException。

class ReverseLinkedList<T> {
  private Node<T> head, tail

  public ReverseLinkedList<T> reverseByRecursive() {
    Node<T> oldTail = tail;
    tail = reverseFrom(head);
    tail.next = null;
    head = oldTail;
    return this;
  }

  private Node<T> reverseFrom(Node<T> from) {
      if (from == tail) {
      return from;
    }
    Node<T> end = reverseFrom(from.next);
    end.next = from;
    return from;
  }
}

感谢各位的阅读,以上就是“Java逆转单向链表怎么实现”的内容了,经过本文的学习后,相信大家对Java逆转单向链表怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Java​逆转单向链表怎么实现

本文链接: https://www.lsjlt.com/news/237038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java​逆转单向链表怎么实现
    这篇文章主要讲解了“Java逆转单向链表怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java逆转单向链表怎么实现”吧!首先这是一个单向的链表,不同于 Java 里面的 Linked...
    99+
    2023-06-04
  • python怎么实现单向链表及单向链表的反转
    这篇文章给大家分享的是有关python怎么实现单向链表及单向链表的反转的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。链表的定义链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息...
    99+
    2023-06-14
  • Java数据结构之链表实现(单向、双向链表及链表反转)
    前言 之前学习的顺序表查询非常快,时间复杂度为O(1),但是增删改效率非常低,因为每一次增删改都会元素的移动。可以使用另一种存储方式-链式存储结构。 链表是一种物理存储单元上非连续、...
    99+
    2022-11-12
  • java怎么实现单链表反转
    要实现单链表的反转,可以使用迭代或递归两种方法。 迭代法: public ListNode reverseList(ListNo...
    99+
    2023-10-26
    java
  • python如何实现单向链表及单向链表的反转
    链表的定义 链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息 单向链表的实现 class ListNode: def __init_...
    99+
    2022-11-12
  • Java实现单链表SingleLinkedList增删改查及反转 逆序等
    节点类 可以根据需要,对节点属性进行修改。注意重写toString()方法,以便后续的输出操作。 //节点类 class Node { public int id; ...
    99+
    2022-11-12
  • python单向链表怎么实现
    这篇文章主要介绍“python单向链表怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python单向链表怎么实现”文章能帮助大家解决问题。单向链表:是将所有的数据作为一个个节点,将所有的节点...
    99+
    2023-06-30
  • 怎么用Python实现单向链表
    这篇文章主要介绍“怎么用Python实现单向链表”,在日常操作中,相信很多人在怎么用Python实现单向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现单向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • JAVA中怎么实现链表和双向链表
    这篇文章给大家介绍JAVA中怎么实现链表和双向链表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JAVA基础:语言中链表和双向链表的实现(转)[@more@]链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语...
    99+
    2023-06-03
  • java双向链表怎么实现
    Java中的双向链表可以通过定义一个Node类来实现,该类包含一个值和两个指针,分别指向前一个节点和后一个节点。具体实现如下: pu...
    99+
    2023-10-22
    java
  • Python实现单向链表
    单向链表每个节点都是由两部分组成:数据字段和指针,指针指向下一个元素在内存中的位置。 单向链表的第一个节点节点是链表头指针,而最后一个节点的指针设为None,不指向任何元素。(链表头...
    99+
    2022-11-11
  • java中单向链表和双向链表是什么
    小编给大家分享一下java中单向链表和双向链表是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、链表简介1、链表概念链表是一种物理存储单元上非连续、非顺序的...
    99+
    2023-06-19
  • python单向循环链表怎么实现
    单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点item: 存储数据的地方next: 链接下一个节点注意: 单向循环链表是首位链接,即尾部的节点要和头部的节点链接单向链表操作1、链表是否...
    99+
    2023-05-16
    Python
  • python中的单向链表怎么实现
    这篇文章主要介绍了python中的单向链表怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的单向链表怎么实现文章都会有所收获,下面我们一起来看看吧。一、单向链表概念单向链表的链接方向是单向的...
    99+
    2023-06-29
  • java实现单链表倒转的方法
    java中有关单链表反转的方法有很多种,这里记录一种并附上详细步骤: 代码如下 public class Solution {     public ListNode revers...
    99+
    2022-11-13
  • C++中怎么实现一个单向链表
    C++中怎么实现一个单向链表,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C++单向链表实现代码:#include < iostream>&...
    99+
    2023-06-17
  • Golang中逆转链表问题怎么解决
    今天小编给大家分享一下Golang中逆转链表问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Golang是一种基于...
    99+
    2023-07-05
  • java中的双向链表怎么实现
    在Java中,可以使用自定义的双向链表类来实现双向链表。以下是一个简单的双向链表的实现示例: public class Doubly...
    99+
    2023-10-24
    java
  • Java实现双向链表
    本文实例为大家分享了Java实现双向链表的具体代码,供大家参考,具体内容如下 1、双向链表 1.1 双向链表的每个节点组成包含节点数据,上一个节点(pre),下一个节点(next) ...
    99+
    2022-11-13
  • python中的单向链表实现
    目录一、单向链表概念二、建立节点对象三、链表对象的初始定义四、判断链表是否为空五、获取链表长度六、向头部添加节点七、向尾部添加节点八、指定位置插入节点九、删除指定位置的节点十、查找是...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作