class Node:
def __init__(self, val=None, next=None):
self.val = val
self.next = next
class LinkList:
def __init__(self):
self.length = 0
self.head = None
self.tail = None
def __iter__(self):
cur = self.head
while cur:
yield cur.val
cur = cur.next
def __len__(self):
return self.length
def add(self, val):
node = Node(val)
if self.length == 0:
self.head = node
self.tail = self.head
node.next = self.head
self.head = node
self.length += 1
def insert(self, index, val):
if index > self.length or index < 0:
raise IndexError
elif index <= 1:
self.add(val)
else:
node = Node(val)
count = 0
cur = self.head
while count < index - 2:
cur = cur.next
count += 1
temp = cur.next
cur.next = node
node.next = temp
self.length += 1
def append(self, val):
node = Node(val)
if self.length == 0:
self.head = node
self.tail = self.head
self.tail.next = node
self.tail = node
self.length += 1
def remove(self, val):
cur = self.head
pre = None
while cur:
if cur.val == val:
if not pre:
self.head = self.head.next
else:
pre.next = cur.next
self.length -= 1
return True
else:
pre = cur
cur = cur.next
def find(self, val):
return val in self.__iter__()
# 翻转链表
def reserve(head: Node):
cur = head
pre = None
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
if __name__ == "__main__":
ls = LinkList()
ls.append(1)
ls.append(2)
ls.append(3)
ls.add(0)
ls.remove(2)
ls.insert(1, 4)
print(ls.find(3))
for x in ls:
print(x)
newHead = reserve(ls.head)
print("翻转之后")
while newHead:
print(newHead.val)
newHead = newHead.next
python 单链表&翻转链表
于 2022-02-23 16:38:53 首次发布