数据结构之链表篇——Python语言实现_删除节点




在数据结构的学习中,链表是动态数据结构的最基本的形式,也是最常见的一种线性数据结构,使用范围广。



在创建链表时,对不同节点之间的链接关系梳理清楚,这一点十分重要。。。



比如,下面开始试着用Python语言来实现基本的链表操作:



链表的节点,可以按如下方式定义:



节点Node的形象表示:




数据结构之链表篇——Python语言实现_头结点_02












# -*- coding: cp936 -*-
# linkedlist.py
class Node:
def __init__(self,value):
self.value=value
self.next=None





链表中插入节点,













    def insert_node(self,value):
newNode=Node(value)
# 头结点为空
if not self.head:
self.head=newNode
else:
# 头结点不为空
newNode.next=self.head
self.head=newNode





链表中删除节点,































    def delete_node(self,value):
# 链表为空
if not self.head:
print "链表为空"
return None
# 删除头节点
if value==self.head.value:
# 保存删除的节点的指针
delete_node=self.head
# 头指针指向下一个节点
self.head=self.head.next
return delete_node
# 删除非头节点
pre_node=self.head
while pre_node.next and value!=pre_node.next.value:
pre_node=pre_node.next
if not pre_node.next:
# 删除节点不存在
return None
if value == pre_node.next.value:
# 删除节点
delete_node=pre_node.next
pre_node.next=pre_node.next.next
return delete_node






链表的长度,













    def length_linkedlist(self,):
tmp=self.head
len_list=0
while tmp:
len_list+=1
tmp=tmp.next
return len_list







打印输出链表,












    def print_linkedlist(self,):
tmp,values=self.head,[]
while tmp:
values.append(tmp.value)
tmp=tmp.next
return values







完整代码实现,可以参考下面的Python程序,














































































































# -*- coding: cp936 -*-
"""
########################################################################
##作者:文方俊 ##
##日期:2020年11月2日 ##
########################################################################


"""
# linkedlist.py
class Node:
def __init__(self,value):
self.value=value
self.next=None

class linkedlist:
def __init__(self,):
self.head=None

def insert_node(self,value):
newNode=Node(value)
# 头结点为空
if not self.head:
self.head=newNode
else:
# 头结点不为空
newNode.next=self.head
self.head=newNode


def delete_node(self,value):
# 链表为空
if not self.head:
print "链表为空"
return None
# 删除头节点
if value==self.head.value:
# 保存删除的节点的指针
delete_node=self.head
# 头指针指向下一个节点
self.head=self.head.next
return delete_node
# 删除非头节点
pre_node=self.head
while pre_node.next and value!=pre_node.next.value:
pre_node=pre_node.next
if not pre_node.next:
# 删除节点不存在
return None
if value == pre_node.next.value:
# 删除节点
delete_node=pre_node.next
pre_node.next=pre_node.next.next
return delete_node




def length_linkedlist(self,):
tmp=self.head
len_list=0
while tmp:
len_list+=1
tmp=tmp.next
return len_list
def traverse_node(self,value):
pass


def print_linkedlist(self,):
tmp,values=self.head,[]
while tmp:
values.append(tmp.value)
tmp=tmp.next
return values




L=linkedlist()
L.insert_node(1)
L.insert_node(2)
L.insert_node(3)
L.insert_node(4)


print "linkedlist: %s" % L.print_linkedlist()


print "length of linkedlist: %s" % L.length_linkedlist()
print "--------------------------分割线-------------------------"


L.delete_node(1)
L.delete_node(2)
L.delete_node(3)
L.delete_node(4)


print "linkedlist: %s" % L.print_linkedlist()


print "length of linkedlist: %s" % L.length_linkedlist()
print "--------------------------分割线-------------------------"


L.delete_node(4)


print "linkedlist: %s" % L.print_linkedlist()


print "length of linkedlist: %s" % L.length_linkedlist()
print "--------------------------分割线-------------------------"













数据结构之链表篇——Python语言实现_删除节点_03





数据结构之链表篇——Python语言实现_链表_04