数据结构-链表的定义、新增与删除

链表的定义
#
链表-一种存储数据的数据结构 # 特点:物理存储单元上非连续的存储结构 # 当我们想在数组的某一个元素之前插入数据的化,需要将该元素以及其后面的所有的元素往后挪一个位置,然后插入。如果说想删除一个元素,就是删除目标元素,同时将目标元素后面的所有元素都向前挪一个位置。 # 假定一个数字的长度为n # 插入和删除操作的时间复杂度就是O(n) # 链表的定义 class Node(): def __init__(self,value,next=None): self.value = value self.next = next # 定义链表节点----------------------- #定义出来结点了 head = Node(10000) #head是只有一个结点的链表 head.next = Node(9999)#在head后面添加了一个值为9999的节点 head.next.next = Node(9998)#在head后面的后面添加了一个值为9998的节点 #head是一个头节点的值为10000,第二个节点的值为9999的链表

查看链表节点
#如何查看链表里面的元素.没有办法事先知道链表的长度的 def print_linklist(head): while head:#head有数据域和指针域 print(head.value) head = head.next
链表的插入
#链表的插入操作,并且返回头节点 #在链表的target元素之前插入value,如果target不存在,则在链表的末尾插入元素 def add_node_in_linklist(head,value,target): #head代表链表的头节点 #value是要插入的值 #target在目标元素之前插入 #插入操作是1. 找出目标节点 2. 将目标节点的前一个节点指向新插入的节点 3. 将新节点的指针指向目标节点 pre = None newNode = Node(value) tempHead = head while tempHead: if tempHead.value == target: if pre is None: newNode.next = head return newNode pre.next = newNode newNode.next = tempHead return head else: pre = tempHead tempHead = tempHead.next pre.next = newNode return head print_linklist(head)
链表的长度
#求链表的长度 def get_linklist_length(head): length = 0 while head is not None:#当前节点是有值的 length +=1 head = head.next return length print("链表的长度为",get_linklist_length(head))
删除链表
#对应第n个节点来说其父节点就是第n-1个节点 def delete_target_from_linklist(head,target): #head 代表给定链表的头节点 #target代表给定链表中要删除的元素值 pre = None result = head while head is not None:#当前节点是有值的 if head.value == target: if pre is None: #print("head.value",head.value) return head.next pre.next = head.next#实现删除head的作用 return result pre = head head = head.next return result head = delete_target_from_linklist(head,10000)#表示删除了目标节点的链表的新的头节点 print_linklist(head) # 执行结果: # E:\工作\测试开发\3-算法课资料>python 20200329LinkTest_Myself.py # 10000 # 9999 # 9998 # 链表的长度为 3 # 9999 # 9998

 

posted @ 2020-03-29 01:12  进阶的淑琴  阅读(572)  评论(0)    收藏  举报