前言: 最近在复习数据结构相关知识,想记录一下自己的学习过程以及自己的一些理解,如有错误,欢迎指正。
数据结构: 链表
单向链表
我们把链表(LinkedList)与数组(ArrayList)作对比
一 链表的特点:
二 链表底层实现(初始化从零添加元素):
"""
:Author: Fantastic_Re
:CSDN: https://blog.csdn.net/qq_29242149?spm=1000.2115.3001.5343&type=blog
"""
# 定义节点类
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 方便打印观看
def __repr__(self):
return f'Node({self.data})'
# 定义链表
class LinkedList:
# 定义头部节点,尾部节点,链表长度
def __init__(self):
self.head = None
self.tail = None
self.size = 0
# 调用对象时,打印链表,方便观看
def __repr__(self):
current = self.head
str_l = ''
while current:
str_l += f'{current} ->'
current = current.next
return str_l + 'END'
# 根据下标返回对应节点数据
def get(self, index):
current = self.head
for _ in range(index):
current = current.next
return current
# 插入方法
def insert(self, index, data):
if index < 0 or index > self.size:
raise IndexError('索引越界')
new_node = Node(data)
if self.size == 0:
self.head = new_node
self.tail = new_node
elif index == 0:
new_node.next = self.head
self.head = new_node
elif index == self.size:
self.tail.next = new_node
self.tail = new_node
else:
prev = self.get(index - 1)
new_node.next = prev.next
prev.next = new_node
self.size += 1
# 根据下标删除元素
def remove(self, index):
if self.head is None:
raise Exception('空链表')
elif index < 0 or index >= self.size:
raise IndexError('索引越界')
elif index == 0 and self.size == 1: # 当删除头部节点而且链表中只有一个数据时
self.head = None
self.tail = None
self.size -= 1
elif index == 0: # 当删除头部节点而且链表中存在两个数据及以上时
current = self.head
self.head = current.next
current.next = None
self.size -= 1
elif index == self.size - 1: # 当删除尾部节点时
pre = self.get(index - 1)
pre.next = None
self.tail = pre
self.size -= 1
else: # 当删除中间节点时
pre = self.get(index - 1)
current = pre.next
pre.next = current.next
current.next = None
self.size -= 1
# 反转链表
def reverse(self):
if self.head:
current = self.head # 保存当前节点信息
prev = None # 保存上一个节点信息
while current:
next_node = current.next # 保存下一个节点信息,防止丢失
current.next = prev # 反转节点指向
if prev is None:
self.tail = current
prev = current
current = next_node
self.head = prev
else:
return []