链表相关方法的实现

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是每一个结点(数据存储单元)里存放下一个结点的信息(即地址)

# 节点的封装
class Node():
    def __init__(self,item):
        self.item = item  # 向节点中添加的数据值
	self.next = None  # next是用来指向链表中下一个节点
# 链表的封装
class Link():
    def __init__(self):
        self._head = None  # 头节点

    def travel(self):  # 遍历整个链表
        cur = self._head
        while cur:
            print(cur.item)
            cur = cur.next

    def add(self, item):  # 链表头部插入节点
        node = Node(item)
        node.next = self._head
        self._head = node

    def append(self, item):  # 链表尾部追加节点
        node = Node(item)
        if self._head is None:
            self._head = node
            return
        cur = self._head
        while cur.next:
            cur = cur.next
        cur.next = node

    def insert(self, pos, item):  # 指定位置插入节点
        node = Node(item)
        if pos > self.length():
            return
        if pos == 0:
            node.next = self._head
            self._head = node
            return

        pre = None
        cur = self._head
        for i in range(pos):
            pre = cur
            cur = cur.next
        pre.next = node
        node.next = cur

    def remove(self, item):  # 删除节点
        pre = None
        cur = self._head
        if item == cur.item:
            self._head = cur.next
            return
        while cur:
            if cur.item == item:
                pre.next = cur.next
                break
            pre = cur
            cur = cur.next

    def reverse(self):  # 链表的反转
        pre = None
        cur = self._head
        cur_next = cur.next
        while cur:
            cur.next = pre
            pre = cur
            cur = cur_next
            if cur != None:
            	cur_next = cur_next.next
        
        self._head = pre
        
       
    def is_empty(self):  # 链表是否为空
        return self._head is None

    def length(self):  # 链表的长度
        count = 0
        cur = self._head
        while cur:
            count += 1
            cur = cur.next
        return count

    def search(self, item):  # 查找节点是否存在
        cur = self._head
        find = False
        while cur:
            if cur.item == item:
                find = True
            cur = cur.next
        return find

链表反转示意图

posted @ 2020-08-13 11:51  左晓龙  阅读(166)  评论(0编辑  收藏  举报