python 链表
# encoding=utf-8 class Node(): def __init__(self, data,p=0): self.data = data self.next = p class linkList(): def __init__(self): self.length = 0 self.head = 0 ''' 判断链表是否为空 ''' def is_empty(self): return self.length == 0 ''' 链表长度 ''' def length(self): current = self.head if current: i = 1 while current.next: current = current.next i += 1 return i else: return 0 ''' 打印链表 ''' def print_link(self): if self.is_empty(): print('empty') else: node = self.head print('head',node.data) while node.next: node = node.next print(node.data) ''' 链表末尾添加node ''' def append_node(self, this_node): if self.is_empty(): ''' 链表为空,head指向node ''' self.head = this_node else: node = self.head while node.next: node = node.next node.next = this_node self.length += 1 ''' 链表插入 ''' def insertlink(self, value, index): if index > self.length: # 超出范围 直接return return else: # 获取当前node this_node = Node(data=value) # 获取head current = self.head if index == 0: self.head = this_node this_node.next = current return while index - 1: current = current.next index -= 1 print('insert is ',current.data) this_node.next = current.next current.next = this_node self.length += 1 return ''' 链表删除 ''' def delete_index(self,index): if index > self.length: return else: if index == 0: self.head = self.head.next else: current = self.head while index - 1: current = current.next index -= 1 print('delete is',current.data) current.next = current.next.next self.length -= 1 return ''' 链表修改 ''' def update_link(self,value,index): if index > self.length: return else: this_node = Node(data=value) if index == 0: this_node.next = self.head.next self.head = this_node else: current = self.head while index - 1: current = current.next index -= 1 this_node.next = current.next.next current.next = this_node def delete_final(self): index = self.length - 1 current = self.head while index - 1: current = current.next index -= 1 current.next = None self.length -= 1 return def clear(self): """ 清空链表 :return: None """ self.head = None self.length = 0 print("Clear the linked list finished.") def get_value(self, index): """ 获取链表中某个位置节点的值 :param index: 位置索引 :return: 该节点值, int or not """ if type(index) is int: if index > self.length: # 索引值超出范围直接提示并且退出 print("Index is out of range.") return else: if index == 0: return self.head.data else: current_node = self.head while index - 1: current_node = current_node.pnext index -= 1 return current_node.pnext.data else: print("Index value is not int.") return def is_huan(self):
fast = self.head
slow = self.head
if fast == None:
return False
while fast != None and fast.next != None:
fast = fast.next.next
slow = slow.next
if fast == slow:
return True
return !(fast == None or fast.next == None) node1 = Node('111') node2 = Node('222') node3 = Node('333') node4 = Node('444') link = linkList() link.append_node(node1) link.append_node(node2) link.append_node(node3) link.append_node(node4) link.insertlink('666',3) link.print_link() link.update_link('888',3) link.print_link() link.delete_final() link.print_link()