单链表快速实现
class Node:
def __init__(self,data):
self.data = data
self.next = None
class Linked_List:
def __init__(self,head = None):
self.head = head
def append(self,new_element):
current = self.head
if self.head:
while current.next:
current = current.next
current.next = new_element
else:
self.head = new_element
def is_empty(self):
return not self.head
def insert(self,position,new_element):
"""
在链表指定索引处插入元素
"""
if position < 0 or position > self.get_length():
raise IndexError('insert 插入时,key值超出范围')
temp = self.head
if position == 0:
new_element.next = temp
self.head = new_element
return
i = 0
while i < position:
pre = temp
temp = temp.next
i += 1
pre.next = new_element
new_element.next = temp
def remove(self,position):
"""
删除指定索引的链表元素
"""
if position < 0 or position > self.get_length() - 1:
raise IndexError('删除元素的索引超出范围')
i = 0
temp = self.head
while temp != None:
if position == 0:
self.head = temp.next
temp.next = None
return
pre = temp
temp = temp.next
i += 1
if i == position:
pre.next = temp.next
temp.next = None
return
def get_length(self):
temp = self.head
length = 0
while temp != None:
length += 1
temp = temp.next
return length
def print_list(self):
temp = self.head
while temp is not None:
print(temp.data)
temp = temp.next
def reverse(self):
prev = None
current = self.head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
self.head = prev
def initlist(self,data_list):
self.head = Node(data_list[0])
temp = self.head
for i in data_list[1:]:
node = Node(i)
temp.next = node
temp = temp.next
双向链表快速实现
class Node(object):
def __init__(self,item):
self.item = item
self.next = None
self.prev = None
class DLinkList(object):
def __init__(self):
self._head = None
def is_empty(self):
return self._head == None
def get_length(self):
cur = self._head
length = 0
while cur != None:
length += 1
cur = cur.next
return length
def travel(self):
cur = self._head
while cur != None:
print(cur.item)
cur = cur.next
print("")
def add(self,item):
node = Node(item)
if self.is_empty():
self._head = node
else:
node.next = self._head
self._head.prev = node
self._head = node
def append(self,item):
node = Node(item)
if self.is_empty():
self._head = node
else:
cur = self._head
while cur.next != None:
cur = cur.next
cur.next = node
node.prev = cur
def search(self,item):
cur = self._head
while cur != None:
if cur.item == item:
return True
cur = cur.next
return False
def insert(self,pos,item):
if pos <= 0:
self.add(item)
elif pos > (self.get_length()-1):
self.append(item)
else:
node = Node(item)
cur = self._head
count = 0
while count < (pos-1):
count += 1
cur = cur.next
node.prev = cur
node.next = cur.next
cur.next.prev = node
cur.next = node
def remove(self,item):
if self.is_empty():
return
else:
cur = self._head
if cur.item == item:
if cur.next == None:
self._head = None
else:
cur.next.prev = None
self._head = cur.next
return
while cur != None:
if cur.item == item:
cur.prev.next = cur.next
cur.next.prev = cur.prev
break
cur = cur.next
单链表应用
"""
交换单链表里的两个链点
"""
class Node:
def __init__(self,data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def traval(self):
cur = self.head
new_list = []
while cur != None:
new_list.append(cur.data)
cur = cur.next
print(new_list)
def insert(self,new_data):
new_node = Node(new_data)
new_node.next = self.head
self.head = new_node
def swapNodes(self,d1,d2):
preD1 = None
preD2 = None
if d1 == d2:
return
else:
D1 = self.head
while D1 is not None and D1.data != d1:
preD1 = D1
D1 = D1.next
D2 = self.head
while D2 is not None and D2.data != d2:
preD2 = D2
D2 = D2.next
if D1 is None or D2 is None:
return
if preD1 is not None:
preD1.next = D2
else:
self.head = D2
if preD2 is not None:
preD2.next = D1
else:
self.head = D1
temp = D1.next
D1.next = D2.next
D2.next = temp
if __name__ == '__main__':
list = LinkedList()
list.insert(5)
list.insert(4)
list.insert(3)
list.insert(2)
list.insert(1)
list.traval()
list.swapNodes(1, 6)
print("After swapping")
list.traval()