算法 链表的基本操作

"""
链表基本操作:创建空链表,删除链表,判断是否为空,添加元素,删除元素,遍历,定位,链表长度
"""


class Node:
    """链表节点初始化"""
    def __init__(self, item):
        self.item = item
        self._next = None


class LinkList:
    """链表及其相关操作"""
    def __init__(self):
        self._head = None

    def is_empty(self):
        """判断是否为空链表,头节点为None则是空"""
        return self._head is None

    def length(self):
        """求链表的长度"""
        p = self._head
        count = 0
        while p:
            count += 1
            p = p._next
        return count

    def append(self, item):
        """向链表尾部添加元素, 考虑是否是空链表"""
        node = Node(item)
        p = self._head
        if not p:
            self._head = node
        else:
            while p._next:
                p = p._next
            p._next = node

    def add(self, item):
        """向链表头部插入元素"""
        node = Node(item)
        node._next = self._head
        self._head = node

    def insert(self, position, item):
        """向链表中插入元素"""
        # 头插 or 尾插 or 中间插入
        if position <= 0:
            self.add(item)
        elif position >= self.length():
            self.append(item)
        else:
            pre = self._head
            count = 0
            while count < position - 1:
                count += 1
                pre = pre._next
            node = Node(item)
            node._next = pre._next
            pre._next = node

    def get_item(self, position):
        """获取某位置的元素"""
        if position < 0 or position >= self.length():
            return None
        p = self._head
        count = 0
        while count != position:
            p = p._next
            count += 1
        return p.item

    def exixt_value(self, item):
        """某个值是否存在"""
        p = self._head
        while p:
            if p.item == item:
                return True
            else:
                p = p._next
        return False

    def remove(self, item):
        """删除元素"""
        p = self._head
        pre = None
        while p:
            if p.item == item:
                # 是否头节点
                if not pre:
                    self._head = p._next
                else:
                    pre._next = p._next
                    break
            else:
                pre = p
                p = p._next

    def clear(self):
        """删除链表"""
        self._head = None

    def travel(self):
        """列表遍历"""
        p = self._head
        while p:
            print(p.item, end=" ")
            p = p._next
        print()


if __name__ == '__main__':
    linklist = LinkList()
    linklist.append(2)
    linklist.append(3)
    linklist.append(4)
    linklist.append(5)
    print(linklist.length())  # 4
    linklist.travel()  # 2 3 4 5
    linklist.add(1)
    linklist.add(0)
    linklist.travel()   # 0 1 2 3 4 5
    linklist.insert(2, 8)
    linklist.insert(2, 9)
    linklist.travel()   # 0 1 9 8 2 3 4 5
    print(linklist.get_item(2), linklist.get_item(12), linklist.get_item(4))    # 9 None 2
    print(linklist.exixt_value(9), linklist.exixt_value(20))    # True False
    linklist.remove(9)
    linklist.remove(5)
    linklist.travel()   # 0 1 8 2 3 4
    linklist.clear()
    linklist.travel()  # 空

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值