当前位置:首页 > 科技  > 软件

五分钟搞懂链表实现:Python数据结构与算法

来源: 责编: 时间:2023-10-08 07:06:36 175观看
导读链表是一种由节点组成的线性数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。1.链表的基本概念(1)节点定义链表中的每一个元素都是一个节点,每个节点通常包含两部分:数据和下一个节点的引用。class Node:

链表是一种由节点组成的线性数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。DED28资讯网——每日最新资讯28at.com

DED28资讯网——每日最新资讯28at.com

1.链表的基本概念

(1)节点定义DED28资讯网——每日最新资讯28at.com

链表中的每一个元素都是一个节点,每个节点通常包含两部分:数据和下一个节点的引用。DED28资讯网——每日最新资讯28at.com

class Node:    def __init__(self, data):        self.data = data  # 节点存储的数据        self.next = None  # 默认下一个节点为空

(2)链表定义DED28资讯网——每日最新资讯28at.com

链表通常有一个头节点来表示链表的开始。尾节点是链表中的最后一个节点,它的下一个节点引用为None。DED28资讯网——每日最新资讯28at.com

DED28资讯网——每日最新资讯28at.com

class LinkedList:    def __init__(self):        self.head = None  # 初始链表为空

2.向链表中添加元素

(1)在链表的开头添加元素DED28资讯网——每日最新资讯28at.com

def add_first(self, data):    new_node = Node(data)   # 创建新的节点    new_node.next = self.head  # 将新节点指向当前的头节点    self.head = new_node    # 更新头节点为新节点LinkedList.add_first = add_first

(2)在链表的结尾添加元素DED28资讯网——每日最新资讯28at.com

def add_last(self, data):    new_node = Node(data)    if self.head is None:  # 若链表为空,则直接将新节点设置为头节点        self.head = new_node        return    last_node = self.head  # 遍历到链表的尾部    while last_node.next:        last_node = last_node.next    last_node.next = new_node  # 在链表尾部添加新节点LinkedList.add_last = add_last

3.从链表中删除元素

(1)删除链表的第一个元素DED28资讯网——每日最新资讯28at.com

def remove_first(self):    if self.head:        self.head = self.head.next  # 更新头节点为下一个节点LinkedList.remove_first = remove_first

(2)删除链表的最后一个元素DED28资讯网——每日最新资讯28at.com

def remove_last(self):    if self.head is None:  # 若链表为空,直接返回        return    if self.head.next is None:  # 若链表只有一个元素,将头节点设置为空        self.head = None        return    second_to_last = self.head  # 找到倒数第二个节点    while second_to_last.next.next:        second_to_last = second_to_last.next    second_to_last.next = None  # 将倒数第二个节点的next设置为空,从而删除最后一个节点LinkedList.remove_last = remove_last

4.遍历链表

def print_list(self):    current_node = self.head  # 从头节点开始遍历    while current_node:        print(current_node.data, end=" -> ")        current_node = current_node.next  # 移动到下一个节点    print("None")LinkedList.print_list = print_list

5.查找链表中的元素

def search(self, target):    current_node = self.head  # 从头节点开始遍历    while current_node:        if current_node.data == target:  # 若找到目标数据,返回True            return True        current_node = current_node.next  # 移动到下一个节点    return False  # 遍历完链表后,未找到目标数据,返回FalseLinkedList.search = search

6.实战案例:反转链表一个常见的面试问题是如何反转链表。我们可以使用迭代的方法来解决这个问题。DED28资讯网——每日最新资讯28at.com

def reverse(self):    prev = None  # 上一个节点    current = self.head  # 当前节点    while current:        next_node = current.next  # 记录下一个节点        current.next = prev  # 将当前节点指向上一个节点        prev = current  # 更新上一个节点为当前节点        current = next_node  # 移动到下一个节点    self.head = prev  # 更新头节点LinkedList.reverse = reverse# 使用示例ll = LinkedList()ll.add_last(1)ll.add_last(2)ll.add_last(3)ll.print_list()  # 输出:1 -> 2 -> 3 -> Nonell.reverse()ll.print_list()  # 输出:3 -> 2 -> 1 -> None

小结

链表提供了一种在内存中存储有序元素的方法,它的主要优势在于插入和删除操作的效率高,不需要移动其他元素。不过,链表的随机访问速度比数组慢,因为需要从头节点开始遍历。理解链表的结构和常用操作是计算机科学基础,也经常用于面试中。DED28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12388-0.html五分钟搞懂链表实现:Python数据结构与算法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 七个国外高效开发者工具,让你的工作流程比德芙更加丝滑

下一篇: 仅需五分钟,使用Initializr快速开发Spring Boot应用

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从“最美JK”起到“最美女星&r
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 破圈是B站头上的紧箍咒

    破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 2纳米决战2025

    2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top