数据结构—链表

news/2024/9/24 12:35:56

一:链表

1、数组是连续的内存空间;而链表可以不一定是连续的内存空间

2、单端链表;从前一个元素指向后一个元素

3、链表的功能

(1)访问 o(n):数组是通过下表或者索引访问元素;链表是通过next指针以此递归的进行查询判断

(2)搜索 o(n):从头部遍历;知道找到位置

(3)插入 o(1):

(4)删除 o(1):

4、特点

写入非常的快;但是读非常的慢{value,next}

5、链表的常用操作

class ListNode:def __init__(self, value=0, next=None):self.value = valueself.next = next#next为指向下一个节点的指针;next=None表示链表为空class LinkedList:def __init__(self):self.head = None#指向链表的第一个节点# 插入节点到链表的头部def insert_at_head(self, value):new_node = ListNode(value)#创建一个新节点;值=valuenew_node.next = self.head#将新节点的next指针指向当前的头节点self.head = new_node#更新链表的头节点# 插入节点到链表的尾部def insert_at_tail(self, value):new_node = ListNode(value)#创建一个新的节点if not self.head:#如果没有头节点self.head = new_node#新创建的节点作为头节点else:current = self.head#否则遍历链表;找到最后一个节点;将新的节点插入到最后的节点当中while current.next:current = current.nextcurrent.next = new_node# 删除链表中第一个匹配的节点def delete_node(self, value):current = self.headif not current:return# 如果要删除的节点是头节点if current.value == value:self.head = current.nextreturn# 找到要删除的节点并移除它while current.next:if current.next.value == value:current.next = current.next.nextreturncurrent = current.next# 打印链表def print_list(self):current = self.headwhile current:print(current.value, end=" -> ")current = current.nextprint("None")

二:刷题

题目203 移除链表元素
(1)思路:首先定义一个虚拟的节点dummy;这个虚拟的节点的目的就是为了防止头节点移动的时候元素丢失;然后在定义一个虚拟的节点current;这个节点的目的就是为了记录head节点移动前的位置;也是为了遍历链表;整体思路就是:如果当前链表的元素等于val;那么就跳过当前的节点继续遍历;如果当前的节点不等于目标值的话,那么就正常的进行遍历!

#初始化链表
class ListNode:def __init__(self,val=0,next=None):self.val=valself.next=next
class Solution:def removeElements(self, head: ListNode, val: int) -> ListNode:dummy=ListNode(0)dummy.next=headcurrent=dummywhile current.next:if current.next.val==val:current.next=current.next.nextelse:current=current.nextreturn dummy.next

题目206 反转链表

from typing import Optionalclass ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:# 集成你想使用的函数,这次实现反转链表def func(head):if head is None:print(head, end="")return Noneprev = Nonecurrent = headwhile current is not None:next_node = current.nextcurrent.next = prevprev = currentcurrent = next_nodereturn prevreturn func(head)# 辅助函数:将列表转换为链表
def list_to_linkedlist(lst):if not lst:return Nonehead = ListNode(lst[0])current = headfor item in lst[1:]:current.next = ListNode(item)current = current.nextreturn head# 辅助函数:将链表转换为列表
def linkedlist_to_list(node):result = []while node:result.append(node.val)node = node.nextreturn result# 示例测试
head_list = []  # 空列表表示空链表
head = list_to_linkedlist(head_list)
solution = Solution()
reversed_head = solution.reverseList(head)
print(linkedlist_to_list(reversed_head))  # 输出: []

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/60116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

8-回溯算法

参考代码随想录题目分类大纲如下:一、回溯算法理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。回溯法其实就是暴力查找,并不是什么高效的算法 回溯法的效率虽然回溯法很难,很不好理解,但是回溯法并不是…

九月

arc131 C考虑奇数情况,只有一个时先手必胜,设当前异或和为 \(S\),必输的情况是 \(\forall S \oplus a_i \in a\),这些数是一一对应的,但一共有奇数,此时先手必胜。偶数是,若第一回合无法结束游戏则变为后手,同上。 E若一个点所有边颜色相同,包含该点的环便不可能三边颜…

微信小程序开发系列10----页面配置--事件冒泡和阻止

下图点击里面,外面的事件也触发 场景:广告 点击先看广告,之后跳转到功能页面 会冒泡的事件源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜索:8-wxmleventMp事件冒泡和阻止

椭圆的第二定义

平面内到定点 \(F(c,0)\)的距离和到定直线 \(\displaystyle l:x=\frac{a^{2}}{c}\)( 点\(F\)不在\(l\)上)的距离之比为常数\(\displaystyle \frac{a}{c}\)(即离心率\(e\),\(0<e<1\))的点的轨迹是椭圆。(即点\(P\)轨迹) 其中定点\(F\)为椭圆的焦点,定直线\(l\)称…

微信小程序开发系列9----页面配置--事件-参数传递

图点击里面,外面的事件也触发 场景:广告 点击先看广告,之后跳转到功能页面 会冒泡的事件 源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜索:7-wxmleventparameter事件-参数传递

使用NSSM把.Net Core部署至 Windows 服务

使用NSSM把.Net Core部署至 Windows 服务 NSSM使用简介1、官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 2、下载后解压到自己喜欢的目录如:F:\work\nssm-2.24\win643、以管理员权限打开命令行工具,切换到nssm.exe所在路径,运行 nssm install,打开程序配置…

PC算法详解

基于约束的方法(PC(Peter-Clark)算法) 基于约束的方法大多数是在经验联合分布上测试条件独立性,来构造一张反映这些条件独立性的图。通常会有多个满足一组给定的条件独立性的图,所以基于约束的方法通常输出一个表示某个 MEC(边缘计算) 的图(例如,一个 PAG)。 最有名的…

第十九讲:幻读是什么,幻读有什么问题?

第十九讲:幻读是什么,幻读有什么问题? 简概:引入 ​ 在上一篇文章最后,我给你留了一个关于加锁规则的问题。 ​ 今天,我们就从这个问题说起吧。为了便于说明问题,这一篇文章,我们就先使用一个小一点儿的表。 ​ 建表和初始化语句如下(为了便于本期的例子说明,我把上篇…