IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Python | 链表学习总结 -> 正文阅读

[数据结构与算法]Python | 链表学习总结

简介

今天打开力扣每日一题,遇到一个新的数据结构:链表

本来每次力扣做题我都是在我自己的本地python调试,调试好后才提交到网上。但是今天遇到一个问题:力扣的测试用例写的是:[1,2,3,4,5],我在写测试用例的时候,也写了:input = [1,2,3,4,5],但是官方的程序竟然都通不过。

后来查找问题的时候才意识到,如果我以input = [1,2,3,4,5]作为输入,那么程序认为输入是列表而不是链表

做个个人的总结。介绍一下链表及其常见的用法。

总结

链表介绍

首先展示一下,在python中,链表和列表的区别:
在这里插入图片描述

从图中可以看出,链表和列表中同时保存1,3,2几个数字。但是列表和链表的保存方式并不同。

总结来说(参见:python数据结构之链表),链表是通过一个个节点(Node)组成的,每个节点都包含了称为数据域(value)和指针域(next)的基本单元,它也是一种递归的数据结构。它能保持数据之间的逻辑顺序,但存储空间不必按照顺序存储。

在这里插入图片描述

链表定义

python没有自带的链表结构,需要自行定义。
程序如下:

class ListNode(object):
	def __init__(self, x):
		self.val = x
		self.next = None

调用的用法如下:

l1 = 
l1.val
l1.next.val
li.next.next.val

链表函数

计算链表的长度

列表的长度计算:len(list1)
但是链表如此操作会报错。

链表的长度计算规则为:

  1. 计数:= 0
  2. 当节点不为空时,执行:
    数:=数+ 1
    节点:=节点的下一个
  3. 返回计数

程序如下:

node = ListNode()  # Node 为链表
count = 0
while node:
	count +=1
	node=node.next
print(n)  # n表示链表的长度

将列表转换为链表

参见: python将列表转化为链表

class Solution:
 
    def initList(self, data):
        # 判断是否为空
        if len(data) == 0:
            return
        else:
            # 创建头结点
            self.head = ListNode(data[0])
            # 头结点
            r = self.head  
            # 指针 
            p = self.head   
            # 逐个为 data 内的数据创建结点, 建立链表
            for i in data[1:]:
                node = ListNode(i)
                p.next = node
                p = p.next
            return r
 
if __name__ == "__main__":
    test = Solution()
    data1 = [1, 3, 2]
    l1 = test.initList(data1)
    print(l1.val, "->", l1.next.val, "->", l1.next.next.val)

LeetCode:剑指 Offer 22. 链表中倒数第k个节点

问题:
在这里插入图片描述

看懂链表的结构后,这道题 就很非常好做了。

官方解答:

class Solution:
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        node, n = head, 0

        # 计算链表长度
        while node:
            node = node.next
            n += 1

        node = head
        for _ in range(n - k):
            node = node.next

        return node
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-03 12:10:17  更:2021-09-03 12:12:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:00:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码