• python 数据结构与算法 day01 单链表


    1. 实现单链表:

    class Node(object):
        """节点"""
        def __init__(self,item):
            self.item=item
            self.next=None
    
    class SingleLinkList(object):
        def __init__(self,node=None):
            self.__head=node
    
        def is_empty(self):
            """判断链表是否为空"""
            return self.__head==None
        def length(self):
            """求链表的长度(需要特别考虑链表为空的情况)"""
            cursor=self.__head  # 游标,实现单链表的遍历(不断移动cursor指针的位置)
            count=0
            while cursor!=None:
                count+=1
                cursor=cursor.next
            return count
        def travel(self):
            """实现单链表的遍历"""
            cursor=self.__head
            while cursor!=None:
                print(cursor.item)
                cursor=cursor.next
        def append(self,item):
            """往单链表尾部追加元素"""
            node=Node(item)
            cursor=self.__head
            if self.is_empty():
                self.__head=node
            else:
                while cursor.next!=None:
                    cursor=cursor.next
                cursor.next=node
    
    ssl=SingleLinkList()
    print(ssl.is_empty())
    print(ssl.length())
    ssl.append(1)
    ssl.append(2)
    ssl.append(3)
    ssl.append(4)
    print(ssl.length())
    ssl.travel()

    运行结果:


    2. 实现单链表(完整版)

    class Node(object):
        """节点"""
        def __init__(self,item):
            self.item=item
            self.next=None
    
    class SingleLinkList(object):
        def __init__(self,node=None):
            self.__head=node
    
        def is_empty(self):
            """判断链表是否为空"""
            return self.__head==None
        def length(self):
            """求链表的长度(需要特别考虑链表为空的情况)"""
            cursor=self.__head  # 游标,实现单链表的遍历(不断移动cursor指针的位置)
            count=0
            while cursor!=None:
                count+=1
                cursor=cursor.next
            return count
        def travel(self):
            """实现单链表的遍历"""
            cursor=self.__head
            while cursor!=None:
                print(cursor.item,end=" ")
                cursor=cursor.next
        def append(self,item):
            """往单链表尾部追加元素(尾插法)"""
            node=Node(item)
            cursor=self.__head
            if self.is_empty():
                self.__head=node
            else:
                while cursor.next!=None:
                    cursor=cursor.next
                cursor.next=node
        def add(self,item):
            """在单链表头部插入元素(头插法)"""
            node=Node(item)
            node.next=self.__head
            self.__head=node
        def insert(self,pos,item):
            """在单链表任意位置插入元素"""
            count=0
            cursor=self.__head
            node=Node(item)
            if self.__head==None:
                node.next=self.__head
                self.__head=node
            else:
                while count!=pos-2:
                    cursor=cursor.next
                    count+=1
                node.next=cursor.next
                cursor.next=node
        def remove(self,item):
            """删除一个节点中元素"""
            cur_left=self.__head
            if not self.is_empty():
                if self.__head.next==None:  # 单链表长度为1
                    if self.__head.item == item:  # 删除第一个节点
                        self.__head = None
                    else:
                        return
                else:
                    if self.__head.item==item:  # 删除第一个节点
                        self.__head=self.__head.next
                        return
                    cur_right=cur_left.next
                    while cur_right!=None:
                        if cur_right.item==item:
                            if cur_right.next==None:  # 删除最后一个节点
                                self.cur_left.next=None
                                return
                            else:
                                cur_left.next=cur_right.next
                                return
                        else:
                            cur_left=cur_left.next
                            cur_right=cur_right.next
    
    
    
    
    
    
    
    ssl=SingleLinkList()
    print(ssl.is_empty())
    print(ssl.length())
    ssl.append(1)
    ssl.append(2)
    ssl.append(3)
    ssl.append(4)
    ssl.add(0)
    ssl.insert(2,2000)
    
    print(ssl.length())
    ssl.travel()
    
    ssl.remove(2000)
    print("
    ")
    ssl.travel()

    运行结果:


    开森~

    talk is cheap,show me the code
  • 相关阅读:
    SWFObject2.0
    年轻人买房的问题
    百度知道的php爬虫
    PHP解决多进程同时读写一个…
    php快速定位多维数组的深度
    不要用充实的借口去浪费时间
    php跨服务器信息获取之cURL
    为你的生命多积累一些厚度
    看完一定让你很受益!
    phpQuery轻松采集网页内容
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9914728.html
Copyright © 2020-2023  润新知