目录
1.4.能够根据输入,复制链表中指定的一部分(连续的部分)。
2.1节点类Node:- 属性:value(值)、next(下一节点)
2.2链表类LinkedList:- 属性:head(头节点) - 方法:尾部/头部插入删除,指定位置插入删除,排序,复制
2.4头部插入:将新节点next指向头节点,头节点更新为新节点
这段代码定义了一个链表节点类Node,包含value和next属性。value表示节点中存储的元素值,next表示指向下一个节点的指针。
1.实现一个单向链表存储整数,并提供相关的操作:
1.1.提供在表头部和尾部添加、删除元素的功能;
1.2.提供在指定位置插入或删除一个元素的功能;
1.3.能够对链表从小到大进行排序;
1.4.能够根据输入,复制链表中指定的一部分(连续的部分)。
2.链表思想:
2.1节点类Node:- 属性:value(值)、next(下一节点)
2.2链表类LinkedList:- 属性:head(头节点) - 方法:尾部/头部插入删除,指定位置插入删除,排序,复制
2.3尾部插入:遍历到尾节点,将新节点作为尾节点next
2.4头部插入:将新节点next指向头节点,头节点更新为新节点
2.5指定位置插入:遍历找到位置,修改新老节点next引用
2.6删除也是类似通过修改引用删除节点
2.7排序通过逐步插入节点实现
2.8复制通过遍历并根据范围复制节点
3.源代码分析
# 定义链表节点类
class Node(object):
def __init__(self, value=None, next=None):
self.value = value # 节点元素
self.next = next # 指针
-
这段代码定义了一个链表节点类
Node
,包含value
和next
属性。value
表示节点中存储的元素值,next
表示指向下一个节点的指针。
# 单链表类
class LinkedList(object):
def __init__(self):
self.head = Node() # 创建头结点
self.length = 0 # 初始化链表长度
-
这段代码定义了单链表类
LinkedList
,其中包含一个头结点head
和链表长度length
的属性。
def __len__(self):
return self.length
-
__len__(self)
方法重写了内置函数len()
,用于返回链表的长度。
def __iter__(self): # 遍历列表节点
for node in self.iter_node():
yield node.value
-
__iter__(self)
方法用于使链表可以进行迭代操作,通过yield
生成节点的值。
def iter_node(self):
curnode = self.head.next
while curnode.next != None:
yield curnode
curnode = curnode.next
if curnode.next == None:
yield curnode
-
iter_node(self)
方法是一个生成器,用于迭代节点。它返回链表中的每个节点对象。
def head_insert(self, value): # 链表头部插入
node = Node(value)
if self.head.next == None:
self.head.next = node
node.next = None
else:
tmp_head = self.head.next
self.head.next = node
node.next = tmp_head
self.length += 1
-
head_insert(self, value)
方法用于在链表头部插入新的节点。 -
如果链表为空,将头指针指向新节点,并使新节点的next指针为None。
-
如果链表不为空,将当前头指针节点存储到
tmp_head
变量,然后让头指针指向新节点,并将新节点的next指针指向原头指针节点。 -
最后,增加链表长度。
def head_del(self): # 删除头结点,返回头结点的值
if self.head.next == None:
return False
else:
self.head = self.head.next
self.length -= 1
return self.head.value
-
head_del(self)
方法用于删除头结点并返回头结点的值。 -
如果链表为空,返回False。
-
如果链表不为空,将头指针指向下一个节点,并减小链表长度,然后返回新的头结点的值。
def append(self, value): # 链表尾部添加节点
node = Node(value)
if self.length == 0:
self.head.next = node
else:
curnode = self.head.next
while curnode.next != None:
curnode = curnode.next
curnode.next = node
self.length += 1
-
append(self, value)
方法用于在链表尾部添加新的节点。 -
如果链表为空,将头指针指向新节点。
-
如果链表不为空,找到最后一个节点,使其next指针指向新节点。
-
最后,增加链表长度。