zoukankan      html  css  js  c++  java
  • python-实现单链表

    # encoding=utf-8
    
    
    class Node(object):
        """节点类"""
        def __init__(self, item):
            """
            初始化函数
            :param item:  要保存的用户数据
            """
            self.item = item
            self.next = None
    
    
    class SingleLinkList(object):
        """单链表"""
        def __init__(self, node=None):
            """
            初始化函数r
            :param node: 可传可不传的头节点
            """
            # 指向头节点
            self.__head = node
    
        def is_empty(self):
            """链表是否为空"""
            return self.__head is None
    
        def length(self):
            """链表长度"""
            current = self.__head
            count = 0
            while current is not None:
                count += 1
                current = current.next
    
            return count
    
        def travel(self):
            """遍历整个链表 要考虑空链表如果是空链表判断条件不成立也就不输出任何信息"""
            current = self.__head
            while current is not None:
                print(current.item, end="")
                current = current.next
    
            print("")  # 多输出换行
    
        def add(self, item):
            """"在链表头部插入元素"""
            node = Node(item)
            node.next = self.__head
            self.__head = node
    
        def append(self, item):
            """"在链表尾部插入节点"""
            node = Node(item)
            cur = self.__head
            if cur is None:
                self.add(item)
                return
            while cur.next is not None:
                cur = cur.next
    
            cur.next = node
    
        def insert(self, pos, item):
            """指定位置添加元素"""
            # 在头结点插入元素
            if pos <=0:
                self.add(item)
            # 在链表的尾部添加元素
            elif pos >= self.length():
                self.append(item)
    
            # 在链表的任意位置添加元素
    
            else:
                cur = self.__head
                count = 0
                # 找到添加位置的前一个位置
                while count < (pos-1):
                    count += 1
                    cur = cur.next
                node = Node(item)
                node.next = cur.next
                cur.next = node
    
        def remove(self, item):
            """
            删除节点
            :param item: 要删除的元素
            :return:
            """
    
            cur = self.__head
            pre = None
            while cur is not None:
                # 找到了元素
                if cur.item == item:
                    # 在头部找到了元素
                    if cur == self.__head:
                        self.__head = cur.next
                    else:
                        pre.next = cur.next
                    return
                pre = cur
                cur = cur.next
    
    
        def search(self, item):
            """
            查找节点是否存在
            :param item: 要查找的element
            :return:
            """
            cur = self.__head
    
            while cur is not None:
                if cur.item == item:
                    return True
                cur = cur.next
    
            return False
    
    
    
    if __name__ == '__main__':
        ll = SingleLinkList()
        print(ll.length())
    
        ll.append(1)   # 1
        print(ll.length())
        ll.travel()
    
        ll.append(2)   #1 2
        print(ll.length())
        ll.travel()
    
        ll.add(3)   # 3 1 2
        ll.travel()
    
        ll.add(4) # 4 3 1 2
        ll.travel()
    
        ll.insert(0, 5)  # 5 4 3 1 2
        ll.travel()
    
        ll.insert(10, 6)  # 5 4 3 1 2  6
        ll.travel()
    
        ll.insert(3, 7)  # 5 4 3  7 1 2  6
        ll.travel()
    
        ll.remove(5)  #  4 3  7 1 2  6)
        ll.travel()
    
        ll.remove(6)  #  4 3  7 1 2
        ll.travel()
    
        ll.remove(7)  #  4 3  1 2
        ll.travel()
    
        ll.remove(4)  #  3  1 2
        ll.travel()
        ll.remove(3)  #   1 2
        ll.travel()
        ll.remove(1)  #  2
        ll.travel()
        ll.remove(2)
        ll.travel()
      
  • 相关阅读:
    第零次作业
    第一本书的学习笔记
    第一次作业
    第零次作业
    第一周作业
    第零次作业回复
    第零次作业
    第一周作业
    第0次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/wgDream/p/7513662.html
Copyright © 2011-2022 走看看