Python算法与数据结构之单链表的实现代码
单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。本文将介绍Python实现单链表的实现代码,包括类的定义、链表类的定义、节点的插入、删除和查找等操作。
节点类的定义
节点类表示单链表的节点包括节点值和下一个节点的指针。以下是Python实现节点类的示例代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
上述代码中,定义了一个ListNode类,包括节点值val和下一个节点的指针next。如果没有指定下一个节点,则默认为None。
链表类的定义
链表类表示单链表,包括头节点和链表长度。以下是Python实现链表类的示例代码:
class LinkedList:
def __init__(self):
self.head = ListNode()
self.length = 0
上述代码中,定义了一个LinkedList类,包括头节点head和链表长度length。头节点不包含任何值,只是一个指向第一个节点的指针。
节点的插入
节点的插入单链表中的一种基本操作,可以在链表的任意位置插入一个新节点。以下是Python实现节点插入的示例代码:
class LinkedList:
def __init__(self):
self.head = ListNode()
self.length = 0
def insert(self, index, val):
if index < 0 or index > self.length:
return False
node = ListNode(val)
cur = self.head
for i in range(index):
cur = cur.next
node.next = cur.next
cur.next = node
self.length += 1
return True
上述代码中,定义了一个insert方法,接受一个索引index和一个值val作为参数。在循环中,找到要插入的位置,将新节点插入到该位置。如果索引超出链表范围,则返回False。插入成功后,链表长度加1,并返回True。
节点的删除
节点的删除是单链表中的一种基本操作,可以删除链表中的任意节点。以下是Python实现节点删除的示例代码:
class LinkedList:
def __init__(self):
self.head = ListNode()
self.length = 0
def delete(self, index):
if index < 0 or index >= self.length:
return False
cur = self.head
for i in range(index):
cur = cur.next
cur.next = cur.next.next
self.length -= 1
return True
上述代码中,定义了一个delete方法,接受一个索引index作为参数。在循环中,找到要删除的节点的前一个节点,将其指针指向要删除节点的下一个节点。如果索引超出链表范围,则返回False。删除成功后,链表长度减1,并返回True。
节点的查找
节点的查找是单链表中的一种基本操作,可以查找链表中的任意节点。以下是Python实现节点查找的示例代码:
class LinkedList:
def __init__(self):
self.head = ListNode()
self.length = 0
def search(self, val):
cur = self.head.next
index = 0
while cur:
if cur.val == val:
return index
cur = cur.next
index += 1
return -1
上述代码中,定义了一个search方法,接受一个值val作为参数。在循环中,逐个比较节点的值,如果找到目标节点,则返回其索引。如果遍历完整个链表仍未找到目标节点,则返回-1。
示例说明
以下是两个示例,说明如何使用LinkedList类进行节点的插入、删除和查找操作。
示例1
创建一个空链表,插入三个节点,分别为1、2、3。
lst = LinkedList()
lst.insert(0, 1)
lst.insert(1, 2)
lst.insert(2, 3)
输出结果:
1 -> 2 -> 3
示例2
创建一个链表,删除第二个节点,查找值为3的节点的索引。
lst = LinkedList()
lst.insert(0, 1)
lst.insert(1, 2)
lst.insert(2, 3)
lst.delete(1)
index = lst.search(3)
print(index)
输出结果:
2
总结
本文介绍了Python实现单链表的实现代码,包括节点类的定义、链表类的定义、节点的插入、删除和查找等操作。单链表是一种常见的数据结构,可以用于解决各种问题。在实际应用中,需要根据实际情况选择合适的数据结构和算法,以获得更好的性能。