[python]链表操作(持续更新中)

Ctrl+f搜关键词,搜不到找其他博客,下面肯定没有

链表

单向链表
  • is_empty() 链表是否为空
  • length()
  • nodes_list() 返回链表中的所有结点的值组成的列表
  • add(data) 链表头部添加节点,值为data
  • append(data) 链表尾部添加节点,值为data
  • insert(pos,data)
  • remove(data) 删除第一个值为data的节点
  • modify(pos,data) 修改指定位置的元素的值
  • search(data) 查找结点是否存在

pycharm实现

单向链表
class Node:
    # 节点类
    def __init__(self, data, _next=None):
        self.data = data  # 数据域
        self.next = _next  # 指针域


class SingleLinkList:
    def __init__(self):
        self.head = None  # 链表的头结点
        self._length = 0  # 链表的长度,链表的元素个数

    def is_empty(self):
        # 判断链表是否为空
        return self._length == 0

    def length(self):
        # 返回链表的长度
        return self._length

    def nodes_list(self):
        # 返回链表中的所有节点的值组成的列表
        res = []
        cur = self.head
        while cur:
            res.append(cur.data)
            cur = cur.next
        return res

    def add(self, data):
        # 往链表的头部添加一个节点,值为data
        # 新建一个节点node
        node = Node(data)
        # 先让node指向当前链表中的头结点
        node.next = self.head
        # 再让链表的head指向当前node节点
        self.head = node
        # 添加节点之后,链表的长度加1
        self._length += 1

    def append(self, data):
        # 往链表的尾部添加一个节点,值为data
        # 新建一个节点node,值为data
        node = Node(data)
        # 找到链表的尾节点
        # 从头结点开始,遍历链表中的所有节点
        # 每次判断当前节点的next是否为空
        # 为空说明当前节点就是尾节点
        # 不为空 通过当前节点的next去访问下一个节点,
        if self.head:
            cur = self.head
            while cur.next:
                cur = cur.next
            # 让当前的尾节点的指针域指向node
            cur.next = node
        else:
            self.head = node
        # 链表的长度+1
        self._length += 1

    def insert(self, pos, data):
        # 往链表的指定位置插入一个节点,值为data
        if pos <= 0:
            self.add(data)
        elif pos > self._length:
            self.append(data)
        else:
            # 正常的输入
            # 第一步 新建一个节点 node
            node = Node(data)
            # 第二步
            cur = self.head
            while pos - 1:
                cur = cur.next
                pos -= 1
            # 到这里之后,cur指向的是索引为pos-1的节点
            # 让node的next指向索引为pos的节点
            node.next = cur.next
            # 让索引为pos-1的节点的next指向cur
            cur.next = node
            self._length += 1

    def remove(self, data):
        # 删除链表中第一个值为data的结点
        cur = self.head
        prev = None  # 要删除的节点的前驱结点
        while cur:
            if cur.data == data:
                # 如果前驱结点为空,说明我们要删除的节点是第一个节点
                if not prev:
                    self.head = cur.next
                else:
                    prev.next = cur.next
                self._length -= 1
                return 0
            prev 
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值