Leetcode Python学习记录——代码随想录链表篇

常见写法

定义链表

一般使用虚拟头结点,方便操作。

# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

dummy_head= ListNode(next=head)

查询

node=self.getNode(index)

    def getNode(self,index: int)->Node | None:
        isLeft = index < self.sz /2
        if not isLeft:
            index = self.sz -index -1
        cur = self.he.next if isLeft else self.ta.prev
        while cur != self.he and cur != self.ta:
            if index==0:
                return cur
            index-=1
            cur = cur.next if isLeft else cur.prev
        return None

判断

if not (fast and fast.next): return

可以要求两个均不为null,再往下进行,否则就返回空。

链表

理论基础

链表是通过指针串联在一起的线性结构,每一个节点由数据域和指针域两部分组成

分类

  1. 单链表 ,每一个节点的指针域只能指向下一个节点。
  2. 双链表 ,每一个节点有两个指针域,指向后一个和前一个。
  3. 循环链表,首尾相连的链表。

链表的存储方式

在内存空间中不连续分布

链表的定义

性能分析

链表与数组

数据类型增删查询
数组O(n)O(1)
链表O(1)O(n)

数组适用于数据量固定,频繁查询的场景
链表适用于数据量不固定,频繁增删的场景

判断

链表节点用==去做判断时,判断的是内存地址是否相等,于是可以据此判断链表相交。
力扣链表相交题目

算法

双指针法

可以用来解决很多链表问题,例如寻找距离尾部第 K 个节点、寻找环入口、寻找公共尾部入口等。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值