Python链表全面讲解__小白篇__01


Python链表全面讲解__小白篇__01


leetcode过程中发现很多题都用的到链表,在这里跟大家share一些我学习过程中对链表所知所学,如果有错误,希望大家***善意指正***。在此谢谢大家,如果非商业转发,请注明出处。未经允许,此文不能作为商业用途。

1: 对(单)链表的基本认识(基于Python)

1.1单项链表中的认识:

单链表组成原理如下:在这里插入图片描述
上图可以看出链表有一个一个节点组成,节点一般用node表示,其中每个node由数据区(信息域)和连接区(链接域)组成,连接区主要写的是下一个节点的“地址”,从而可以形成有规律的链接。
但在这里需要注意的有两点:

  • 每个链表得有“head”,即头节点,从”head“出发可以找到任何节点。
  • 每个节点的尾端指向的都是“none“

但其实在python中是没有真正“链表”这个概念的,其“赋值”和其他的语言的赋值是不一样的。

在这里可以给大家举一个例子,在python中,给"a"一个数字"10"的意思是把"a"指向的地址为"20",而不是把a就当作了“20”。

再举个例子:a,b,c = 1,2,3. a,b,c = b,c,a则只是把a,b,c 指向的位置发生改变而已。如下图:
在这里插入图片描述

更深入的,其实可以明白在python当中,"a"也可以指向其他很多,比如"function"也可以,“a“只是所代表的事物只是其指向的东西,而不是”a”本身。

1.2:python中单链表的建立:

此时我们可以选择建立节点:

这里我不仅仅对链表的介绍不仅仅是限于python,更是对所有语言。
节点的代码:

class  Node(object):
    def __init__(self,elem):
        #保存数据,保存到元素区
        self.elem = elem 
        #刚开始的数据指向对象设置为空,节点初始状态是没有任何指向的,则用None
        self.next = None
node = Node(100)

1.3 单链表的设计:

class SingleLinkList(object):
    """单链表"""
    def _init_(self, node)#:初始节点也可以设为0,则node = None
        self._head =node #开始指向节点,如果node=None,则初始节点为0,则head = None
 node = Node(100)
 single_obj = singlelinklist(node)
 接下来就可以做很多操作了。

2对单链表的基本操作

2.1
假设已经设置成

node = Node(100)

使用这些的时候首先要创建对象:

如果是指定了链表,就要写成:

 Single_obj = SingleLinkList(100)

没有的话就是

Single_obj = SingleLinkList()

这样才能做一些操作,比如

  single_obj.add()

2.2empty的功能

empty的主要功能是来判断链表是否为空的。

def is_empty(self):
    """链表是否为空"""
    return self._head == None #这个判断一下列表的head是不是空的就可以了

2.3 length的功能
length主要是来判断链表的长度的。

    def length(self):
        #不需要参数,直接 length(Single_obj)就行

2.4 travel的功能:
travel主要是遍历的作用,是不需要额外设置参数的,在这里我们要介绍一下,在travel中要用到的游标的作用。如图:在这里插入图片描述

def travel()
       # cur作为游标,用来移动,遍历节点。
        cur = self._head
        # count记录数量
        count = 0
        while cur != None:
            count += 1
            cur = cur.next

这里也可以用cur.next作为判断条件。

  count = 1
    while cur.next != None:
        count += 1
        cur = cur.next

但一定要head,否则两者结果是不一样的。。

2.5 add的作用:
add主要是在链表头添加元素。

    def add(self,item):
        """链表头部添加元素"""

2.6 append的作用:
append主要在链表尾部添加元素

   def append(self, item):
        """链表尾部添加元素"""
          

但这里是有一个过程的,首先我们要判断head是不是为空,如果为空的话,则直接把


cur= self._head:

unless则可以用:


cur.next != None:

以此来最终把元素append到结尾。

代码如下:
#添加你需要的节点
 #首先设置节点
            node = Node(item)
            #判断是head是否为none
            if self.is_empty():
                self._head = node 
            cur = self._head
            #不为none则开始“寻找”尾端。
            while cur.next != None:
                cur = cur.next
            cur.next = node

3.6 删除和查找节点将在下一节中继续讲述。

 def insert(self, pos, item):
        """删除元素"""
    #这里指的删除元素指的是删除第一个在链表中出现的你指出的"item",但不是删除位置。
def search(self, item):
    """查找节点是否存在"""
#综合例子:
 if __name__ == "__main__":
        ll = SingleLinkList()
        print(ll.is_empty())
        print(ll.length())
        ll.append(1)
        print(ll.is_empty())
        print(ll.length())

        ll.append(2)
        ll.append(3)
        ll.append(4)
        ll.append(5)
        ll.travel





  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值