【Java实现】反转链表

简介: 【Java实现】反转链表

题目入口📌:反转链表

问题描述

       给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

输入输出实例:

解题分析

       本题需要我们翻转单链表,难度在于单链表是单向的,链表中的结点只能往后找,不能前找,如果我们使用双指针的方式的话,很容易搞成死循环。如下图

我们会发现,cur所指向结点中的next更新为head所指向的结点,那cur想要想后移动,就只能移动到head所指向的结点上,就会导致死循环。所以我们要再另设一个指针来指引cur指针向后移动,如下图。

我们在移动cur的时候,还要把head的位置更新。题目最后要返回链表的头结点,head移动不仅可以方便找到cur前一个结点,而且当cur指向null的时候,head所指向的结点就是头结点,一举两得。

代码实现

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null) return head;//当链表为空时,直接返回
        ListNode cur = head.next;
        head.next = null;//翻转前为头结点,翻转后,就是尾结点,尾结点的next值要置为null
        while(cur != null ){
            ListNode curNext = cur.next;//设置第三个指针,方便cur前进
            cur.next = head;
            head = cur;
            cur = curNext;
        }
        return head;
    }


相关文章
|
2月前
|
Java
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
23 3
|
5月前
|
Java
环形数组链表(java)
环形数组链表(java)
|
3月前
|
存储 Java
|
3月前
|
存储 Java
java实现单链表的创建、增、删、改、查
这篇文章详细介绍了Java中如何实现单链表的创建以及对单链表进行增加、删除、修改、查询等操作的方法,并提供了相应的代码示例。
java实现单链表的创建、增、删、改、查
|
3月前
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
3月前
|
存储 Java
java实现双向链表的增删改查
这篇文章展示了如何在Java中实现双向链表的增加、删除、修改和查询操作,并通过代码示例演示了在双向链表中存储和操作学生信息的过程。
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
54 0
|
3月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
44 0
|
6月前
|
数据采集 Java 数据处理
Java流与链表:探索java.util.stream与LinkedList的交汇点
本文探讨了Java中流(Streams)与链表(LinkedList)的结合使用,展示了如何通过流处理LinkedList以实现高效数据操作。示例代码包括LinkedList的基本操作、使用Stream进行过滤和映射,以及结合HttpClient和代理IP实现网络爬虫。代理IP有助于绕过反爬机制,提高爬取效率。通过结合这些技术,开发者能编写出更简洁、高效的代码。
Java流与链表:探索java.util.stream与LinkedList的交汇点