Java实现反转单链表

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

反转单链表是一个常见的编程问题,可以使用迭代或递归的方式来实现。下面分别给出这两种方式的Java代码实现:

使用迭代方式实现反转单链表:

class ListNode {
    int val;
    ListNode next;

    ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}

public class ReverseLinkedList {

    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;

        while (curr != null) {
            ListNode nextTemp = curr.next;
            curr.next = prev;
            prev = curr;
            curr = nextTemp;
        }

        return prev;
    }

    public static void main(String[] args) {
        // 创建链表 1 -> 2 -> 3 -> 4 -> 5
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        // 创建 ReverseLinkedList 对象
        ReverseLinkedList reverseLinkedList = new ReverseLinkedList();

        // 反转链表
        ListNode reversedHead = reverseLinkedList.reverseList(head);

        // 输出反转后的链表 5 -> 4 -> 3 -> 2 -> 1
        while (reversedHead != null) {
            System.out.print(reversedHead.val + " ");
            reversedHead = reversedHead.next;
        }
    }
}

使用递归方式实现反转单链表:

class ListNode {
    int val;
    ListNode next;

    ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}

public class ReverseLinkedList {

    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;

        return newHead;
    }

    public static void main(String[] args) {
        // 创建链表 1 -> 2 -> 3 -> 4 -> 5
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(3);
        head.next.next.next = new ListNode(4);
        head.next.next.next.next = new ListNode(5);

        // 创建 ReverseLinkedList 对象
        ReverseLinkedList reverseLinkedList = new ReverseLinkedList();

        // 反转链表
        ListNode reversedHead = reverseLinkedList.reverseList(head);

        // 输出反转后的链表 5 -> 4 -> 3 -> 2 -> 1
        while (reversedHead != null) {
            System.out.print(reversedHead.val + " ");
            reversedHead = reversedHead.next;
        }
    }
}

无论是迭代还是递归,反转单链表的思路都是将当前节点的指针指向前一个节点,从而实现链表的反转。以上两种方式都可以正确实现单链表的反转。文章来源地址https://www.toymoban.com/news/detail-612370.html

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

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

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

相关文章

  • 单链表反转(逆置)——(四种方法实现)

    链表逆置就是把最后一个数据提到最前面,倒数第二个放到第二个……依次类推,直到第一个到最后一个。 由于链表没有下标,所以不能借助下标来实行数据的逆置,要靠空间的转移来完成链表的逆置,这里采用没有头节点的链表来实现逆置。 第一种——头插法 算法思想:

    2024年02月11日
    浏览(27)
  • 【算法与数据结构】 C语言实现单链表队列详解

    前面我们学习了队列的顺序表的实现,本节将用单链表实现队列。 队列也可以数组和链表的结构实现, 使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低 。下面我们先复习一下队列的基本概念: 队列:只允许在一端进行插入

    2024年04月11日
    浏览(43)
  • Java 语言实现选择排序算法

    【引言】 选择排序算法是一种简单但有效的排序算法。它的原理是每次从未排序的元素中选择最小(或最大)的元素,放在已排序的末尾(或开头),逐渐形成有序序列。本文将使用Java语言实现选择排序算法,并详细讲解其思想和代码实现。 【算法思想】 选择排序的核心思

    2024年02月11日
    浏览(48)
  • Java 语言实现二分查找算法

    【引言】 二分查找算法是一种高效且常用的查找算法。它适用于已排序的数组或列表,并通过将目标值与中间值进行比较,来确定目标值在左侧还是右侧。本文将使用Java语言实现二分查找算法,并详细讲解其思想和代码实现。 【算法思想】 二分查找的核心思想是不断缩小查

    2024年02月11日
    浏览(26)
  • Java 语言实现归并排序算法

    【引言】 归并排序算法是一种高效且稳定的排序算法。它采用分治法的思想,将数组反复分割成两个子数组,直到每个子数组只有一个元素。然后将这些子数组逐个合并,最终得到排序完毕的数组。本文将使用Java语言实现归并排序算法,并详细讲解其核心思想和代码实现。

    2024年02月11日
    浏览(25)
  • Java 语言哈希查找算法实现

    哈希查找,也称为散列查找,是一种高效的查找算法。它利用哈希函数将映射到数组中的一个位置,通过直接访问该位置来获取元素,从而实现快速查找。Java语言提供了一些类和接口,例如 HashMap 和 HashTable ,使得我们可以方便地使用哈希查找算法。本文将详细介绍

    2024年02月10日
    浏览(33)
  • Java高级语言实现插入排序算法

    【引言】 插入排序算法是一种简单且常用的排序算法。它通过依次将未排序的元素插入已排序序列中的正确位置来达到排序的目的。本文将使用Java高级语言实现插入排序算法,并讲解其核心思想和代码实现。 【算法思想】 插入排序的核心思想是通过构建有序序列,对于未排

    2024年02月11日
    浏览(36)
  • Java 实现反转一个链表

    翻转指的是改变链表中结点的指向,而不是将它的数据反转。 上图展示出的就是一个反转前的链表,下图展示一个反转后的链表。 根据上图可以看出,结点的地址和数据都没有改变,改变的只是链表结点的指向,更改后的头结点变成了尾结点。 首先要定义一个 cur 变量,让

    2024年02月11日
    浏览(36)
  • 算法村第一关黄铜|链表|单链表与双向链表(c语言&c++实现)

    1.理解C 语言里是如何构造出链表的 2.链表增加元素,首部、中间和尾部分别会有什么问题,该如何处理? 3.链表删除元素,首部、中间和尾部分别会有什么问题,该如何处理? 4.双向链表是如何构造的,如何实现元素的插入和删除。 链表是一种常见的数据结构,由一系列节

    2024年02月15日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包