首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 单链表实现&基础函数

Python 单链表实现&基础函数

作者头像
Ewdager
发布于 2020-07-14 06:53:05
发布于 2020-07-14 06:53:05
46500
代码可运行
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站
运行总次数:0
代码可运行

前两天面滴滴,被问到怎么判断两个链表是否相交,然后并不懂什么是单链表相交…就很尴尬。 赶紧复习一下单链表的知识。

单链表实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LNode:
    def __init__(self, elem, next_ = None):
        self.elem = elem
        self.next = next_

class LList:
    def __init__(self):
        self._head = None

    def is_empty(self):
        return self._head is None

    # 前端插入
    def prepend(self, elem):
        self._head = LNode(elem, self._head)

    # 删除头结点并返回
    def pop_first(self):
        if self.is_empty():
            raise LinkedListUnderFlow("in pop")
        e = self._head.elem
        self._head = self._head.next
        return e

    def append(self, elem):
        if self.is_empty():
            self._head = LNode(elem)
            return
        p = self._head
        while p.next:
            p = p.next
        p.next = LNode(elem)

    def pop(self):
        if self.is_empty():
            raise LinkedListUnderFlow("in pop")
        p = self._head
        if p.next is None:
            e = p.elem
            self._head = None
            return e

        # 用p.next.next做条件是因为把最后一个结点删除,需要找到倒数第二个结点
        while p.next.next is not None:
            p = p.next
        e = p.next.elem
        p.next = None
        return e

    def find(self, pred):
        p = self._head
        while p.next is not None:
            if pred(p.elem):
                # 构建生成器,找到了一个元素可以继续找下一个
                yield p.elem
            p = p.next


    def printall(self):
        p = self._head
        while p is not None:
            print(p.elem, end="")
            if p.next is not None:
                print(", ", end="")
            p = p.next

        # 换行,因为默认end参数为 "\n"
        # 等价 print("\n", end="")
        print("")

if __name__ == '__main__':
    my_list = LList()
    for i in range(10, 0, -1):
        my_list.prepend(i)
    my_list.printall()    # 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    for i in range(11, 21):
        my_list.append(i)
    my_list.printall()
    print(my_list.pop())  # 20
    print(my_list.pop_first()) # 1
    my_list.printall()   # 2~19

    def find_odd(n):
        if n % 2 != 0:
            return n
    for i in my_list.find(find_odd):
        print(i)         # 1, 3, 5, 7, 9 ,...

补充一下print的参数

  • print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
  • sep: 多个参数之间的分隔字符串
  • end: print结束后的字符串
  • file: 输出到已打开的文件,注意,当文件关闭后才会保存
  • flush: 所有数据打印到控制台,立即“刷新”到实际控制台并保留待处理的打印缓冲区 可用于上面的文件操作,当文件未关闭时及时输出到控制台,参考Stack Overflow
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[数据结构与算法] 链表的其他类型
单链表是最简单的链表,单链表的一种变形就是循环单链表,其中最后一个结点的next域不用None,而是指向表的第一个结点,这样就形成了一种循环结构,所以叫循环单链表。 双链表:单链表只有1个方向的链接,只能做一个方向的扫描和逐步操作。单链表的next指针域指向下一个结点,而双链表结点除了具有next指针外,还有一个previous指针,指向上一个结点。单链表中查找元素只能从头结点开始,根据他的next指针域找到下一个结点,而双链表最大的区别在于不仅能找到下一个结点,还能找到上一个结点。 循环双链表:然后看下什
用户1622570
2018/04/12
9270
[数据结构与算法] 链接表总结
上一次说到了顺序表,链接表和顺序表一样,也是线性表。那为什么有了线性表还要有链接表呢?总之就是当数据过大时,顺序表存在一些存储方面的限制,而链接表比顺序表要更有效。链接表的主要不同之处在于使用了链接技
用户1622570
2018/04/12
9530
[数据结构与算法] 链接表总结
python实现单链表
#encoding:utf-8 import sys class Lnode():     def __init__(self,elem,next=None):         self.elem = elem    #节点的值         self.next = next    #指向下一个节点     def getelem(self):         return self.elem     def getnext(self):         return self.next class
py3study
2020/01/14
5030
【Python编程挑战】:单链表实现技巧与最佳实践
概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 链表是由一个个结点组成,每个结点之间通过链接关系串联起来,每个结点都有一个后继结点,最后一个结点的后继结点为空结点。
爱喝兽奶的熊孩子
2024/05/24
1450
【Python编程挑战】:单链表实现技巧与最佳实践
顺序表与单链表
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示 也称作线性表的顺序存储结构或顺序映像。通常,称这种存储结构的线性表为顺序表(Sequent ial List
用户3577892
2021/02/23
9940
顺序表与单链表
【数据结构】单向循环链表
  单链表的一个变形是单向循环链表单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。
宜轩
2022/12/26
2580
链表的创建与基本操作(Python版)
链表的创建与基本操作(Python版) #/usr/bin/python #-*- coding: utf-8 -*- #Function: simulate the link-list in python #__author__: Tresser # class LNode(object): #结点初始化函数, p 即模拟所存放的下一个结点的地址 #为了方便传参, 设置 p 的默认值为 0 def __init__(self, data, p=0): self.
py3study
2020/01/09
2.1K0
数据结构——链表
链式存储结构 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻有关术语 结点:数据元素的存储映像。由数据域和指针域两部分组成 - 数据域:存储元素数值数据 - 指针域:存储直接后继结点的存储位置 链表:n 个结点由指针链组成一个链表。它是线性表的链式存储映像,称为线性表的链式存储结构 - 单链表 - 结点只有一个指针域的链表,称为单链表或线性链表 - 双链表 - 有两个指针域的链表,称为双链表 - 循环链表 - 首尾相接的链表称为循环链表 头指针
ruochen
2021/06/28
7220
数据结构——链表
以后再也不怕别人问「单链表」的问题啦。
在程序设计里,我们经常需要将同为某个类型的一组数据元素作为一个整体来使用,需要创建这种元素组,用变量来记录它们或者传入函数等等等等,「线性表」就是这样一组元素的抽象,它是某类元素的集合并且记录着元素之间一种顺序关系,是最基本的数据结构之一,在实际程序中运用非常广泛,比如 Python 中的 list 和 tuple 都可以看作是线性表的实现。
编程文青李狗蛋
2019/11/07
2990
以后再也不怕别人问「单链表」的问题啦。
数据结构之链表
数据结构是一种分析、存储、组织数据的方法与逻辑,它考虑了数据之间的特性与相互关系,简单地说,数据结构就是对数据与算法的研究。数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图。
MeteoAI
2019/09/24
5770
单链表的算法
静默虚空
2018/01/05
7100
python算法与数据结构-单链表(38)
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
Se7eN_HOU
2019/07/02
5100
【说站】python双向链表的概念介绍
1、更复杂的链表是双向链表或双面链表。每个节点有两个链接:一个指向前一个节点,这个节点是第一个。
很酷的站长
2022/11/23
3690
【说站】python双向链表的概念介绍
单链表
在闭关刷了几天的leetcode后,我发现了一个事情,就是海贼王真好看,单刷leecode太无聊了,于是乎我边刷题边看海贼王,也是这就是我效率很低的原因,刷了一些题后也相应的去看一下别人说的如何刷才是有效率的,所以现在来记录一下关于链表的实现。
sjw1998
2019/09/28
5710
python算法与数据结构-双向链表(40)
  一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。
Se7eN_HOU
2019/06/28
4600
python算法与数据结构-双向链表(40)
Python实现链表
单链表: # -*- coding:utf-8 -*- class Node(object): """节点""" def __init__(self,elem): self.elem = elem self.next = None class SingleLinkList(object): """单链表""" #头结点 def __init__(self,node = None): self._head = node
py3study
2020/01/15
6580
用python实现单链表的基础操作
用python实现单链表的基础操作:插入,删除,遍历,判空,清空链表,求长度,获取元素,判断元素是否存在。
算法与编程之美
2023/12/06
1850
用python实现单链表的基础操作
【说站】Python单向循环链表的创建
1、当实例化一个单向循环链表时,该链表是一个空链表,在将节点依次链接之后,链表中才会出现节点和数据。
很酷的站长
2022/11/23
5470
【说站】Python单向循环链表的创建
数据结构与算法(一)
算法的概念 算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。 算法是独立存在的一种解决问题的方法和思想。 对于算法而言,实现的语言并不重要,重要的是思想。 算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等),我们现在是在用Python语言进行描述实现。 算法的五大特性 输入: 算法具有0个或多个输入 输出: 算法至少有
酱紫安
2018/04/16
1.1K0
数据结构与算法(一)
数据结构(2):链表(上)
顺序表可以随时存取表中的任意一个元素,但插入和删除操作需要移动大量元素。链式存储线性表时,不需要使用地址连续的存储单元,即不要求逻辑上相邻的元素在物理位置上也相邻,它通过“链”建立起数据元素之间的逻辑关系,因此插入和删除操作不需要移动元素,而只需修改指针,但也会失去顺序表可随机存取的优点。
不可言诉的深渊
2021/03/24
9350
相关推荐
[数据结构与算法] 链表的其他类型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验