class ListNode:
def __init__(self,val=None,next=None):
self.val = val
self.next = next
#创建链表
def create_list(l,n):
l.val = int(input())
p = l
for i in range(n-1):
node = ListNode()
node.val = int(input())
p.next = node
p = p.next
p.next = None
#获取链长度
def length(l):
p = l
llen = 0
while p:
llen += 1
p = p.next
return llen
#链表翻转
def reverse(l):
res = pre = None
p = l
while p:
pre = p.next
p.next = res
res = p
p = pre
return res#返回头指针
#遍历链表
def traverse(l):
p = l
while p:
print(p.val)
p = p.next
#在n位置插入链表
def insert(l,n,val):
p = l
count = 1
node = ListNode()
node.val = val
if n == 0:
node.next = p
p = node
return p#返回头指针
elif n > length(l):
print('插入错误')
return p#返回头指针
elif n == length(l):
for i in range(n-1):
p = p.next
node.next = p.next
p.next = node
return l#返回头指针
else:
while p and count < n:
count += 1
p = p.next
node.next = p.next
p.next = node
return l#返回头指针
def isempty(l):
p = l
if p == None:
# print('链表为空')
return False
else:
# print('链表不为空')
return True
#删除链表,在n位置删除链表元素[1,2,3,4,5,6]
def delete(l,n):
p = l
if not isempty(l):
print('链表为空')
return l
elif n >= length(l):
print('超出链表长度')
return l
elif n == 0:
p = p.next
return p
else:
n -= 1
while n and p.next:
n -= 1
p = p.next
p.next = p.next.next
return l
#查看第n个元素
def look(l,n):
p = l
if not isempty(l):
print('链表为空')
return l
if n >= length(l):
print('超出链表长度')
return l
if n == 1:
print('第1个元素为%s' % p.val)
else:
for i in range(1, n):
p = p.next
print('第%d个元素为%s' % (n, p.val))
if __name__ == '__main__':
l = ListNode()
create_list(l, 5)
traverse(l)
print('链表l长度为%d'% length(l))
l = insert(l,5,0)
l = insert(l,0,0)
traverse(l)
print('链表l长度为%d' % length(l))
print('------------')
l = delete(l, 5)
traverse(l)
print('链表l长度为%d' % length(l))
look(l,1)
look(l,5)
look(l,7)