链表python
无序链表、有序链表
有序列表排序通常是升序或降序,并且我们假设列表项具有已经定义的有意义的比较运算。
许多有序列表操作与无序列表的操作相同。
必须明确链表的第一项位置,一旦知道第一项。
链表实现的基本构造快是节点。
每个节点对象必须至少保存两个信息。
首先,节点必须包含列表项本身。我们将这个称为节点的数据字段。
此外,每个节点必须保存对下一个节点的引用。
Node 类还包括访问,修改数据和访问下一个引用的常用方法。
1 class Node(): 2 def __init__(self,initialdata): 3 self.data = initialdata 4 self.next = None 5 def getdata(self): 6 return self.data 7 def getnext(self): 8 return self.next 9 def setdata(self,newdata): 10 self.data = newdata 11 def setnext(self,newnext): 12 self.next = newnext 13 temp = Node(93) 14 print(temp.getdata())
已经有了节点了,开始构造链表
无序列表将从一组节点构建,每个节点通过显式引用链接到下一个节点。
只要我们知道在哪里找到第一个节点(包含第一个项),之后的每个项可以通过连续跟随下一个链接找到。
考虑到这一点, UnorderedList 类必须保持对第一个节点的引用。
! 注意,每个链表对象将维护对链表头部的单个引用 !
1 #定义节点 2 class Node(): 3 def __init__(self,initialdata): 4 self.data = initialdata 5 self.next = None 6 7 #构造链表 8 class List(): 9 //初始空链表 10 //链表类本身不包含任何节点对象,只是对节点头的引用 11 def __inti__(self): 12 self.head = None 13 #添加 14 #在链表头添加 15 def add(self,item): 16 newnode = Node(item) 17 newnode.next = self.head 18 self.head = newnode #新节点头 19 #有序链表添加 20 #先找合适的位置,再放进去 21 def orderlist_add(self,item): 22 current_node = self.head 23 previous = None 24 found = False 25 while current_node != None and not found: 26 if current_node >= item: 27 founnd = True 28 else: 29 previous = current_node 30 current_node = current_node.next 31 #要么没找到current_node=None,放到链表末尾;要么找到了found=True,插入 32 newnode = Node(item) 33 if current_node == None: 34 current_node = newnode 35 else: 36 previous.next = newnode 37 newnode.next = current_node 38 39 #链表长度 40 def length(self): 41 node = self.head 42 count = 0 43 while node != None: 44 count += 1 45 node = node.next 46 return count 47 #链表搜索 48 def search(self,item): 49 current_node = self.head 50 while current_node != None: 51 if current_node.data == item; 52 return True 53 else: 54 current_node = current_node.next 55 return False 56 #删除 57 #先找再删,记录前一个节点信息 58 def remove(self,item): 59 current_node = self.head 60 found = False 61 previous = None 62 #先找,只要节点为None或找到了就停止循环 63 while current_node != None and not found: 64 if current_node.data == item: 65 found = True 66 else: 67 previous = current_node 68 current_node = current_node.next 69 #这个时候只有两种情况,要么找到了found=True;要么没找到,此时current_node=None 70 if current_node == None: 71 print("We coundn't find") 72 else: 73 previous.next = current_node.next