【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;
    }


相关文章
|
4天前
|
Java
环形数组链表(java)
环形数组链表(java)
6 0
|
1月前
|
存储 Java
Java数据结构:链表
Java数据结构:链表
31 2
|
1月前
|
数据采集 Java 数据处理
Java流与链表:探索java.util.stream与LinkedList的交汇点
本文探讨了Java中流(Streams)与链表(LinkedList)的结合使用,展示了如何通过流处理LinkedList以实现高效数据操作。示例代码包括LinkedList的基本操作、使用Stream进行过滤和映射,以及结合HttpClient和代理IP实现网络爬虫。代理IP有助于绕过反爬机制,提高爬取效率。通过结合这些技术,开发者能编写出更简洁、高效的代码。
Java流与链表:探索java.util.stream与LinkedList的交汇点
|
12天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
15 2
|
24天前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
11 2
|
24天前
|
算法 Java C语言
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)
10 1
|
24天前
|
算法 安全 Java
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 21:合并两个有序链表Java/C/Python3实现含注释说明,Easy)
16 1
|
4天前
|
算法 Java
Java数据结构与算法:双向链表
Java数据结构与算法:双向链表
|
4天前
|
算法 Java
Java数据结构与算法:循环链表
Java数据结构与算法:循环链表
|
4天前
|
Java
单向环形链表-约瑟夫问题(java)
单向环形链表-约瑟夫问题(java)
7 0