python实现单链表与双向链表

# 首先看单链表
class
Chain(): def __init__(self): self.first = None self.length = 0 def is_empty(self): """是否为空""" return self.first == None def add(self, val): """头部添加""" node = Node(val) temp = self.first node.next = temp self.first = node self.length += 1 def append(self, val): """尾部添加""" node = Node(val) if self.first: temp = self.first mid = None while temp: mid = temp temp = temp.next mid.next = node else: self.first = node self.length += 1 def __setitem__(self, item, val): """插入元素""" node = Node(val) temp, index = self.first, 0 if item == 0: node.next, self.first = self.first, node self.length += 1 else: while temp: if index+1 == item: node.next, temp.next = temp.next, node self.length += 1 break index += 1 temp = temp.next def __len__(self): """链表长度""" return self.length @property def len_2(self): """链表长度(时间复杂度O(n))""" if not self.first: return 0 else: temp = self.first length = 1 while temp.next: length += 1 temp = temp.next return length def pop(self): """删除尾部元素(有错误)""" temp = self.first mid = None while temp.next: mid, temp = temp, temp.next if mid: mid.next = None self.length -= 1 def __delitem__(self, item): """删除某一位置元素""" temp, index = self.first, 0 if item == 0: if self.first: self.first = self.first.next self.length -= 1 while temp: if index + 1 == item: temp.next = temp.next.next self.length -= 1 index += 1 temp = temp.next def bianli(self): """遍历链表""" temp = self.first while temp: print(temp.value) temp = temp.next

   def reverse1(self):

      """反转链表"""
      temp = self.first
      prev = None
      while temp:
        temp_next = temp.next
        temp.next = prev
        prev = temp
        temp = temp_next
      self.first = prev

   def reverse2(self):

      """反转链表"""
      chain_list = []

      temp = self.first

      while temp:

        chain_list.append(temp.value)

        temp = temp.next

       temp = self.first

      while temp:

        temp.val = chain_list.pop()

        temp = temp.next


    def __iter__(self):
        pass
    def __next__(self):
        pass
class Node():
    def __init__(self, val):
        self.value = val
        self.next = None

 

# 在来看双向链表
class Node():
    def __init__(self, val):
        self.value = val
        self.prev = None
        self.next = None
class Chain():
    def __init__(self):
        self.first = None
    def is_empty(self):
        """是否为空"""
        return self.first == None
    def add(self, val):
        """头部添加"""
        node = Node(val)
        self.first.prev = node
        temp = self.first
        node.next = temp
        self.first = node
    def append(self, val):
        """尾部添加"""
        node = Node(val)
        temp = self.first
        if not temp:
            self.first = node
        else:
            while temp.next:
                temp = temp.next
            node.prev = temp
            temp.next = node
    def __delitem__(self, item):
        """删除元素"""
        temp, index = self.first, 0
        while temp:
            if index == item:
                if temp.next:
                    temp.next.prev, temp.prev.next = temp.prev, temp.next
                else:
                    temp.prev.next = None
            index += 1
            temp = temp.next
    def travel(self):
        temp = self.first
        while temp:
            print(temp.value)
            temp = temp.next

 

posted @ 2019-05-11 20:51  辣眼睛De小新  阅读(337)  评论(0编辑  收藏  举报