数据结构 ——— 单链表oj题:反转链表

news/2024/10/3 18:59:30 标签: 数据结构, 链表, c语言, 算法

目录

题目要求

手搓一个简易链表

代码实现 


题目要求

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


手搓一个简易链表

代码演示:

struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n2);
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n3);
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n4);
struct ListNode* n5 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n5);

n1->val = 1;
n2->val = 3;
n3->val = 5;
n4->val = 7;
n5->val = 9;

n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = NULL;

代码实现

代码演示:

struct ListNode* reverseList(struct ListNode* head)
{
	if (head == NULL)
		return NULL;

	struct ListNode* prev = NULL;
	struct ListNode* cur = head;
	struct ListNode* next = cur->next;

	while (cur != NULL)
	{
		cur->next = prev;

		// 迭代
		prev = cur;
		cur = next;

		if(next != NULL)
			next = next->next;
	}

	return prev;
}

代码解析:

代码思路:改变节点的指向,将单链表的第一个节点的 next 指向 NULL,第二个节点的 next 指向第一个节点,第三个节点的 next 指向第二个节点…………,以此类推,就完成了链表的反转

代码逻辑:利用一前(prev)一后(next)一中间(cur) 3 个节点指针进行迭代,将 cur 的 next 指向 prev,再依次往后赋值,需要注意的是 next 赋值为下一个节点的时候,要先判断 next 是否为空,再赋值,且结束的条件是中间节点为空,中间节点为空时就表示链表反转到位,最后再返回 prev 节点指针,就是新的头节点指针

代码验证:

代码的时间复杂度和空间复杂度:

while 循环执行了 N 次,每次内部是常数次,且没有开辟额外的空间,得出:

算法的时间复杂度(大O渐进表示法):O(N)

算法的空间复杂度(大O渐进表示法):O(1)


http://www.niftyadmin.cn/n/5688844.html

相关文章

深入理解 Solidity 中的支付与转账:安全高效的资金管理攻略

在 Solidity 中,支付和转账是非常常见的操作,尤其是在涉及资金的合约中,比如拍卖、众筹、托管等。Solidity 提供了几种不同的方式来处理 Ether 转账,包括 transfer、send 和 call,每种方式的安全性、灵活性和复杂度各有…

一个简单的摄像头应用程序1

这个Python脚本实现了一个基于OpenCV的简单摄像头应用,我们在原有的基础上增加了录制视频等功能,用户可以通过该应用进行拍照、录制视频,并查看已拍摄的照片。以下是该脚本的主要功能和一些使用时需要注意的事项: 功能 拍照: 用户可以通过点击界面上的“拍照”按钮或按…

【嵌入式系统】第18章 脉宽调试器(PWM)

目录 18.1 结构框图 18.3 功能说明 18.3.4 PWM 信号发生器 18.3.5 死区发生器 18.3.6 中断/ADC 触发选择器 18.3.7 同步方法 18.3.8 故障条件 18.3.9 输出控制块 LES 硬件介绍(12)正交编码接口QEI 19.1 结构框图 19.2 信号描述 19.3 功能说明…

长期提供APX515/B原装二手APX525/B音频分析仪

Audio Precision APx515 是一款针对生产测试而优化的高性能音频分析仪。它因其速度、性能、自动化和易用性而成为一流的仪器。它具有卓越的性能,具有 –106 dB 的典型 THDN、1M 点 FFT 和 192k 数字 I/O,以及所有 APx 系列音频分析仪的一键式自动化和易用…

FreeRTOS篇15:中断管理

一.中断优先级 任何中断的优先级都大于任务! 在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 015 ,默认情况下它是从 515 ,0~4 这 5 个中断优先级不是 F…

AI情感陪伴新纪元:WT2605C语音芯片在成人用品中的创新应用

在探索成人用品领域的无限可能时,科技的每一次进步都为我们带来了前所未有的体验。而今,WT2605C AI语音芯片的引入,正悄然改变着这一传统行业的面貌,为成人用品赋予了全新的情感陪伴功能,开启了智能化、个性化的新时代…

TransFormer 视频笔记

TransFormer BasicsAttention单头注意力 single head attentionQ: query 查寻矩阵 128*12288K key matrix 128*12288SoftMax 归一 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/19e3cf1ea28442eca60d5fc1303921f4.png)Value matrix 12288*12288 MLP Bas…

Nginx的基础讲解之重写conf文件

一、Nginx 1、什么是nginx? Nginx(engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 2、用于什么场景 Nginx适用于各种规模的网站和应用程序,特别是需要高并发处理和负载均衡的场…