在数据结构的学习中,链表是动态数据结构的最基本的形式,也是最常见的一种线性数据结构,使用范围广。
在创建链表时,对不同节点之间的链接关系梳理清楚,这一点十分重要。。。
比如,下面开始试着用Python语言来实现基本的链表操作:
链表的节点,可以按如下方式定义:
节点Node的形象表示:
# -*- 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 "--------------------------分割线-------------------------"