【数据结构算法篇】链表面试必刷题1——反转链表

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

题目描述

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

数据范围: 0 ≤ n ≤1000


要求

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

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

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

26.png


输出样例

示例1:

输入:{1,2,3}

返回值:{3,2,1}

实例2:

输入:{}

返回值:{}

说明:空链表则输出空


解决问题的思路

对于数据结构的题,最好还是一边画图一边思考问题。这个题我简单画了一下图,如下:

27.png

图画的不是很好,大家凑合着看一下吧,画图可以为我们提供方很多思路,看着这张图,我们就可以知道这个题的目的就是让我们改变链表每个节点的指向

这个题就很简单了,用头插法就可以解决这个问题。

我们可以先找到第二结点,然后把从第二个结点开始之后的结点依次用头插法放在第一个结点的前面。

其实在这里有一个问题需要大家注意一下,就是我用头插法插完之后,不能直接把指针域给改变了,否则就会找不到下一个节点了。看下图:

28.png

链表本身就只是逻辑上的连续,靠着指针域找到下一个结点。这里将第二个结点放在头结点后,如果将它的指针域修改之后,它就与后面的结点断开了联系,就找不到后面的结点了。在这里看上去不是特别明显,只有三个结点,但如果是很多个结点,那么就会丢掉很多个结点。

要解决这个问题也很简单,只要我们每次把要进行头插的结点和它的下一个节点都存下来就没问题了。

当然数据结构是一门逻辑非常严谨的学科,在实例2中给了空链表的问题,如果没有给我们空链表实例我们也要考虑到。不只有空链表,还有只有一个结点的链表的这种情况,只有一个结点那就不需要反转了,直接返回这个结点就可以了。


代码实现

/*

public class ListNode {

   int val;

   ListNode next = null;

   ListNode(int val) {

       this.val = val;

   }

}*/

public class Solution {

   public ListNode ReverseList(ListNode head) {

       //空链表

       if(head == null){

           return null;

       }

       //结点只有一个

       if(head.next == null){

           return head;

       }

       ListNode cur = head.next;

       head.next = null;

       while(cur != null){

           ListNode curNext = cur.next;

           cur.next = head;

           head = cur;

           cur = curNext;

       }

       return head;

   }

}

33.png

————34.png————————————

版权声明:本文为CSDN博主「二月知野」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_63463510/article/details/126962752

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
19天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
19天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
27天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
1月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
1月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
1月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
1月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇

热门文章

最新文章