zoukankan      html  css  js  c++  java
  • 单向链表

      1 class Node(object):
      2     def __init__(self,elem):
      3         #elem指数据元素
      4         self.elem = elem
      5         #指向下一个节点的链接域
      6         self.next = None
      7 #构造单向链表类
      8 class singleLinkList:
      9     #初始化方法
     10     def __init__(self,node=Node):
     11         #判断node是否为空
     12         if node != None:
     13             headNode = Node(node)
     14             self.__head = headNode
     15         else:    
     16             self.__head = node  #私有属性
     17 
     18     #在头部添加元素
     19     def add(self,item):
     20         #将传入的值构造成节点
     21         node = Node(item)
     22         #将新节点的链接域next指向头节点
     23         node.next = self.__head
     24         #将链表的头__head指向新节点
     25         self.__head = node
     26     
     27     #在单向链表尾部追加元素 
     28     def append(self,item):
     29         #将传入的值构造成节点
     30         node = Node(item)
     31         if self.is_empty():
     32             self.__head = node
     33         else: #单链表不为空
     34             curNode = self.__head
     35             while curNode.next != None:
     36                 curNode = curNode.next
     37             #修改节点指向,最后一个节点的next指向node
     38             curNode.next = node
     39 
     40     #在指定位置添加元素
     41     def insert(self,pos,item):
     42         #如果传入的pos是小于等于0的数,默认的插入头部
     43         if pos <= 0:
     44             self.add(item)
     45         #如果pos的值大于链表长度,直接插入到尾部
     46         elif pos > (self.length()-1):
     47             self.append(item)
     48         else:
     49             #构造节点
     50             node = Node(item)
     51             count = 0
     52             preNode = self.__head
     53             while count < (pos-1): #**寻找前一个节点
     54                 count += 1
     55                 preNode = preNode.next
     56             #修改指向
     57             #将前一个节点的next指向插入位置节点
     58             node.next = preNode.next
     59             #将插入位置的前一个节点的next指向新节点
     60             preNode.next = node 
     61 
     62 
     63     #删除节点
     64     def remove(self,item):
     65         curNode = self.__head
     66         preNode = None
     67         while curNode != None:
     68             if curNode.elem == item:
     69                 #判断是否是头节点
     70                 if preNode == None:#是头节点
     71                     self.__head = curNode.next
     72                 else:
     73                     preNode.next = curNode.next
     74                 break #否则会出现死循环
     75             else:
     76                 preNode = curNode
     77                 curNode = curNode.next
     78 
     79     #查找节点是否存在
     80     def search(self,item):
     81         curNode = self.__head
     82         while curNode != None:
     83             if curNode.elem == item:
     84                 return True
     85             curNode = curNode.next
     86         return False
     87 
     88     #判断单向链表是否为空
     89     def is_empty(self):
     90         #判断head指向是None,如果是None则是空链表
     91         #if self.__head == None:
     92         #    return True
     93         #else:
     94         #    return False
     95         return self.__head == None
     96 
     97     #计算单向链表的长度
     98     def length(self):
     99         count = 0
    100         curNode = self.__head
    101         while curNode != None:
    102             count += 1
    103             curNode = curNode.next
    104         return count
    105     def travel(self):
    106         curNode = self.__head
    107         while curNode != None:
    108             print(curNode.elem,end='	')
    109             curNode = curNode.next
    110         print('')
    111 if __name__ == '__main__':
    112     #初始化元素值为20的单向链表
    113     singleLinkList = singleLinkList(20)
    114     #初始化一个空的链表
    115     #singleLinkList = singleLinkList()
    116     print('是否是空列表:',singleLinkList.is_empty())
    117     #print('链表的长度为:',singleLinkList.length())
    118     print('--------------遍历单链表-------------')
    119     singleLinkList.travel()
    120     print('-----------------查找----------------')
    121     print(singleLinkList.search(20))
    122     #print(singleLinkList.search(30))
    123     print('---------------头部插入--------------')
    124     singleLinkList.add(1)
    125     singleLinkList.add(2)
    126     singleLinkList.add(3)
    127     singleLinkList.travel()
    128     print('--------------尾部追加--------------')
    129     singleLinkList.append(10)
    130     singleLinkList.append(30)
    131     singleLinkList.append(40)
    132     singleLinkList.travel()
    133     print('链表的长度为:',singleLinkList.length())
    134     print('-------------指定位置插入------------')
    135     singleLinkList.insert(2,100)
    136     singleLinkList.travel()
    137     singleLinkList.insert(0,200)
    138     singleLinkList.travel()
    139     singleLinkList.insert(100,300)
    140     singleLinkList.travel()
    141     print('-------------- 删除节点---------------')
    142     singleLinkList.remove(200)
    143     singleLinkList.travel()
    144     singleLinkList.remove(300)
    145     singleLinkList.travel()
     1 是否是空列表: False
     2 --------------遍历单链表-------------
     3 20
     4 -----------------查找----------------
     5 True
     6 ---------------头部插入--------------
     7 3       2       1       20
     8 --------------尾部追加--------------
     9 3       2       1       20      10      30      40
    10 链表的长度为: 7
    11 -------------指定位置插入------------
    12 3       2       100     1       20      10      30      40
    13 200     3       2       100     1       20      10      30      40
    14 200     3       2       100     1       20      10      30      40      300
    15 -------------- 删除节点---------------
    16 3       2       100     1       20      10      30      40      300
    17 3       2       100     1       20      10      30      40
    正是江南好风景
  • 相关阅读:
    Html2Text
    分析文件上传过程中的HTTP头部
    去除html标签
    .NET/C#中的索引器
    MSB与LSB
    大流量网站的底层系统架构
    经典SQL语句,可以让行的数据当列来显示
    在页面弹出漂亮的提示框右下角弹出,方正的框
    ASP.NET读取XML某节点返回DataTable实例
    读取EXECL文件内容,可以支持分布
  • 原文地址:https://www.cnblogs.com/monsterhy123/p/12882864.html
Copyright © 2011-2022 走看看