发布于2019-11-17 19:15 阅读(1040) 评论(0) 点赞(10) 收藏(2)
# 结点定义
class Node(object):
def __init__(self, elem):
self.elem = elem
self.next = None
# 链表实现
class SingleLinkList(object):
def __init__(self, node=None):
self.__head = node
def is_empty(self):
return self.__head == None
def length(self):
cur = self.__head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def travel(self):
cur = self.__head
while cur != None:
print(cur.elem, end=" ")
cur = cur.next
print(end="\n")
def add(self, item):
node = Node(item)
node.next = self.__head
self.__head = node
def append(self, item):
node = Node(item)
if self.is_empty():
self.__head = node
else:
cur = self.__head
while cur.next is not None:
cur = cur.next
cur.next = node
def insert(self, pos, item):
node = Node(item)
if pos <= 0:
self.add(item)
elif pos > (self.length()-1):
self.append(item)
else:
pre = self.__head
count = 0
while count < (pos-1):
count += 1
pre = pre.next
node.next = pre.next
pre.next = node
def remove(self, item):
cur = self.__head
pre = None
while cur is not None:
if cur.elem == item:
if cur == self.__head: # 如果要删除的刚好在头结点位置
self.__head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
def search(self, item):
cur = self.__head
while cur is not None:
if cur.elem == item:
return True
else:
cur = cur.next
return False
#测试代码
if __name__ == "__main__":
ll = SingleLinkList()
print(ll.is_empty())
print(ll.length())
ll.append(1)
print(ll.is_empty())
print(ll.length())
ll.append(2)
ll.append(3)
ll.insert(2, 93)
ll.travel()
ll.append(4)
ll.append(5)
ll.add(88)
ll.append(6)
ll.travel()
ll.remove(5)
ll.travel()
print(ll.is_empty())
print(ll.length())
print(ll.search(88))
True
0
False
1
1 2 93 3
88 1 2 93 3 4 5 6
88 1 2 93 3 4 6
False
7
找到了
class Node(object):
def __init__(self, item):
self.elem = item
self.next = None
self.prev = None
class DoubleLinkList(object): # DoubleLinkList(SingleLinkList)可以继承单链表
def __init__(self, node=None):
self.__head = node
def is_empty(self):
return self.__head is None
def length(self):
cur = self.__head
count = 0
while cur is not None:
count += 1
cur = cur.next
return count
def travel(self):
cur = self.__head
while cur is not None:
print(cur.elem, end=" ")
cur = cur.next
print(end="\n")
def add(self, item):
node = Node(item)
if self.is_empty(): # 处理空链表
self.__head = node
else:
node.next = self.__head
self.__head = node
node.next.prev = node # 此句对空链表产生影响
# self.__head.prev = node
# self.__head = node
def append(self, item):
node = Node(item)
cur = self.__head
if self.is_empty(): # 处理空链表
self.__head = node
else:
while cur.next is not None:
cur = cur.next
cur.next = node
node.prev = cur
def insert(self, pos, item):
node = Node(item)
if pos <= 0:
self.add(item)
elif pos > (self.length()-1):
self.append(item)
# 写法1:定位到pos结点前一个pre
# else:
# count = 0
# pre = self.__head
#
# while count < pos-1:
# count += 1
# pre = pre.next
# node.next = pre.next
# node.prev = pre
# node.next = pre.next
# pre.next = node
# 写法2:定位到当前结点pos cur
else:
count = 0
cur = self.__head
while count < pos:
count += 1
cur = cur.next
node.next = cur
node.prev = cur.prev
# cur.prev = node
# node.prev.next = node
# 最后两句还可以替换指向顺序
cur.prev.next = node
node.next = cur
def remove(self, item):
cur = self.__head
pre = None
cur = self.__head
while cur is not None:
if cur.elem == item:
if cur == self.__head: # 头结点
self.__head = cur.next # 只有一个头结点
if cur.next: # 不只是一个头指针
cur.next.prev = None
else:
cur.prev.next = cur.next # 尾结点
if cur.next: # 不是 尾结点
cur.next.prev = cur.prev
break
else:
cur = cur.next
def search(self, item):
cur = self.__head
while cur is not None:
if cur.elem == item:
return True
else:
cur = cur.next
return False
if __name__ == "__main__":
ll = DoubleLinkList()
print(ll.length())
print(ll.is_empty())
ll.insert(3, 1000)
ll.remove(1000)
ll.travel()
ll.append(899)
ll.add(5)
ll.add(56)
ll.add(9)
ll.travel()
ll.remove(5)
ll.travel()
ll.add(44)
print(ll.length())
print(ll.is_empty())
ll.travel()
print(ll.search(7))
ll.remove(899)
ll.travel()
0
True
9 56 5 899
9 56 899
4
False
44 9 56 899
False
44 9 56
作者:23dh
链接:https://www.pythonheidong.com/blog/article/158403/46b1ac9160a7a2b78f0a/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!