单链表是一种常见的数据结构,它由一系列的节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在单链表中,查找和删除节点是常见的操作。
1.单链表查找:
要查找单链表中的一个节点,需要从链表的头节点开始,沿着指针依次遍历每个节点,直到找到目标节点或者到达链表的末尾(即指针为null)为止。
下面是一个查找单链表中某个节点的示例代码:
def find_node(head, target):
current = head
while current is not None:
if current.data == target:
return current
current = current.next
return None
在上述代码中,head代表链表的头节点,target是要查找的目标节点的值。代码中使用一个while循环来遍历链表,将当前节点的值与目标值进行比较,如果相等则返回当前节点,否则继续向下遍历。如果遍历完整个链表都没有找到目标节点,则返回None表示未找到。
2.单链表删除:
单链表删除操作通常分为两种情况:删除头节点和删除中间/尾节点。删除节点时,需要注意更新指针,使得链表的连续性不被破坏。
a. 删除头节点:
要删除单链表的头节点,只需将头节点的下一个节点设为新的头节点。
下面是一个删除单链表头节点的示例代码:
def delete_head(head):
if head is None:
return None
new_head = head.next
head.next = None
return new_head
在上述代码中,如果链表为空,则直接返回None。否则,将头节点的下一个节点作为新的头节点,并将原头节点的指针设为None。
b. 删除中间/尾节点:
要删除单链表的中间或尾节点,需要先找到待删除节点的前一个节点,然后将其指针指向待删除节点的下一个节点。
下面是一个删除单链表中间/尾节点的示例代码:
def delete_node(head, target):
if head is None:
return None
if head.data == target:
return head.next
current = head
while current.next is not None:
if current.next.data == target:
current.next = current.next.next
break
current = current.next
return head
在上述代码中,首先检查头节点是否就是待删除节点,如果是则将头节点的下一个节点作为新的头节点返回。否则,使用一个循环找到待删除节点的前一个节点,然后将前一个节点的指针指向待删除节点的下一个节点,并跳出循环。