关于反转链表这件事,我有话要说(附带牛客面试必刷100题中第一题BM1反转链表)(原地反转法)

本文介绍了如何反转单链表,包括题目描述、解析和代码实现。作者通过示例和图解详细解释了反转链表的过程,并提供了一个Java代码片段来演示O(1)空间复杂度和O(n)时间复杂度的解决方案。此外,文章还引用了其他资源以帮助读者更好地理解链表反转的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

        在系统的学习了链表这一块的知识了之后,我对于链表这块的知识点也算是彻底搞懂了,今天就来给大家讲讲关于反转链表这回事,我的一个小理解,如有不对欢迎大家随时指正。写在博客上也算是我自己的一个记录,怕后来又忘了哈哈。

二、题目描述

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

数据范围: 0\leq n\leq10000≤n≤1000

要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。

如当输入链表{1,2,3}时,

经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。

以上转换过程如下图所示:

示例1

输入:

{1,2,3}

返回值:

{3,2,1}

示例2

输入:

{}

返回值:

{}

说明:

空链表则输出空

三、题目解析

放上我自己总结的一张图。写的字不好大家谅解哈哈哈哈。

 

我觉得下面这个动图可以帮助我们理解,现在放上动图。希望可以帮助到大家!

四、代码片段

package everyday.nowcoder;

/**
 * @Author: wenjingyuan
 * @Date: 2022/09/29/19:30
 * @Description:反转链表
 * https://www.nowcoder.com/practice/
 * 75e878df47f24fdc9dc3e400ec6058ca?tpId=295&tqId=23286&ru=/exam/
 * oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2
 * Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%
 * 25AF%2587%26topicId%3D295
 */
public class NumBM1 {
    public ListNode ReverseList(ListNode head) {
        //新链表
        ListNode newHead =null;
        while(head!=null){
            //先保存一下访问节点的下一个节点
            //留着到下一步访问
            ListNode temp=head.next;
            //把新链表挂在原来链表的后面就可以了
            head.next=newHead;
            //更新新链表的头结点
            newHead=head;
            //继续到下一步
            head=temp;
        }
        return newHead;
    }
    }

五、总结

        我学会是因为看了下面这篇文章,我放在下面的链接里,博主写的超级好,帮了我很多大家有需要大家可以看看。

【链表反转-2种java实现】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值