zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java大数取余
    hdu--5351--MZL's Border
    NYOJ--水池数目
    NYOJ--32--SEARCH--组合数
    NYOJ--20--搜索(dfs)--吝啬的国度
    hdu--4148--Length of S(n)
    hdu--2098--分拆素数和
    hdu--1873--看病要排队
    hdu--1870--愚人节的礼物
    hdu--1237--简单计算器
  • 原文地址:https://www.cnblogs.com/jiaxiaoxin/p/10850008.html
Copyright © 2011-2022 走看看