# -*- coding:utf-8 -*-
#创建单个节点类
class Node:
def __init__(self, x):
self.val = x
self.next = None
'''链表类
添加一个哨兵节点,便于后面的操作
函数实现:增删改查
'''
class LinkList(object):
def __init__(self):
self.head = None
def init(self,data):
#初始化哨兵节点
self.head = Node(None)
p = self.head
for i in data:
node = Node(i)
p.next = node
p = p.next
def get_length(self):
p = self.head
length = 0
while p.next:
length+=1
p = p.next
return length
'''在第几个节点的位置进行插入,从1开始,0代表头结点'''
def insert(self,index,item):
#如果插入位置大于链表长度,或者index<0,无法插入
if index > self.get_length() or index < 0:
print('LinkList is null!')
if index==0:
self.head.next = Node(item)
#找到插入位置
insert_location = 0
p = self.head.next
q = Node(item)#待插入数据
while p:
insert_location+=1
if insert_location==index:
q.next = p.next
p.next = q
else:
p = p.next
'''删除第几个节点,索引从1开始'''
def delete(self,index):
pre = self.head
p = self.head.next
j=0
while p:
j+=1
if j ==index:
pre.next = p.next
pre = pre.next
p = p.next
def find(self,value):
index = 0 #节点索引,从1开始,不包含哨兵节点
p = self.head.next
while p:
index+=1
if p.val == value:
return index
p = p.next
def print_LinkList(self):
p = self.head.next
while p:
print(p.val,end='-->')
p = p.next
prin('NULL')
print('\n')
a = LinkList()
a.init([1,2,3])
a.insert(2,10)
a.print_LinkList()
a.delete(1)
a.print_LinkList()
print(a.find(10))
print(a.get_length())