链表用头结点还是头指针让我混乱。在写append函数时,发现网上的写法各有不同,而带头结点的会更好理解,也更简洁。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021031816035517.png)
以下是带头结点的单链表一些简单的相关函数。
class Node:
def __init__(self,elem,next=None):
self.elem=elem
self.next=next
class Link:
def __init__(self,data):
self.head=Node(None)
for i in data:
self.append(i)
def is_empty(self):
if self.head.next is None:
return 1
def length(self):
if self.is_empty():
return 0
else:
len=0
p=self.head
while(p.next):
p=p.next
len+=1
return len
def travel(self):
if self.is_empty():
return
p=self.head
while(p.next is not None):
p=p.next
print(p.elem,end=' ')
def find_elem(self,tar):
p = self.head
while (p.next is not None):
if p.elem==tar:
print('存在元素',tar)
return 1
p = p.next
def append(self,item):
cur=self.head
new_node = Node(item)
while(cur.next is not None):
cur=cur.next
cur.next=new_node
def add(self,item):
new_node=Node(item)
new_node.next=self.head.next
self.head.next=new_node
def insert(self,pos,item):
new_node=Node(item)
cur=self.head
count=0
while cur.next is not None:
cur=cur.next
count+=1
if count==pos-1:
break
new_node.next=cur.next
cur.next=new_node
def remove(self,item):
cur=self.head.next
pre=self.head
while cur.next is not None:
if cur.elem==item:
break
cur=cur.next
pre=pre.next
pre.next=cur.next
data=[1,2,3,4]
myLink=Link(data)
myLink.travel()
myLink.find_elem(1)
myLink.add(0)
myLink.append(5)
myLink.travel()
myLink.insert(3,1.5)
print('\n')
myLink.travel()
myLink.remove(1.5)
print('\n')
myLink.travel()
print('\n')
print('链表长度为',myLink.length())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)