面试热题经验top1.反转链表

本文详细解析了如何反转链表,提供了一种基于迭代的解决方案,并给出了相关代码实现。通过存储每个节点的下一个节点,然后改变指针方向,达到链表反转的效果。时间复杂度为O(n),空间复杂度为O(1)。适合面试准备和算法学习。

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

top 1.链表反转

与其仰望星空,不如做一个摘星人

1.问题描述

给定链表的头结点head,要求反转链表,并且返回反转后的链表。

示例 1:

输入:head=[1,2,3,4,5,6,7]
输出:[7,6,5,4,3,2,1]

示例 2:

输入:head=[1,2,3]
输出:[3,2,1]

2.思路分析:

此题的目的是反转整个链表,并返回反转后的链表,思路是:链表中元素结点位置不动,只要将当前结点指向下一个结点的指针指向当前结点的前一个结点。

3.详细代码及注释:

class Solution {
	public ListNode reverseList(ListNode head) {
		if (head == null) { 
			return head; 
		} 
		
		ListNode node = head; 
		ListNode prev = null;// 用于当作每个节点的前一个节点  

		while (node != null) {
			ListNode next = node.next;// 先存储每个节点的下一个节点
			node.next = prev; // 将指针指向前一个节点
			prev = node; // 将当前节点作为下一个节点的前置节点
			node = next;// 往后移
		} 
		return prev; 
	}
}

详细步骤:

  1. 创建链表。
  2. 创建一个结点作为每个结点的前一个结点。
  3. 先存储每个结点的下一个结点
  4. 将原来指向下一个结点的指针指向它的前一个结点。
  5. 遍历迭代链表。
  6. 返回反转后的链表。

3.时间复杂度及空间复杂度:

因为反转过程中要遍历一遍链表,所以时间复杂度为O(n),其中n是链表的长度。
空间复杂度:O(1)。

4.总结:

这道题的思路就是将原来指向下一个结点的指针指向它的前一个结点,在这之前,先存储当前结点的下一个结点,防止数据丢失。

持续更新面试热题,数据结构与算法分析,计算机网络,计算机操作系统,数据库,计算机组成原理,记录学习成长过程。共勉,加油!陌生人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值