📅  最后修改于: 2023-12-03 14:56:19.181000             🧑  作者: Mango
在处理链表的算法问题时,有时需要随机选择链表中的一个节点。本文将介绍如何用Python实现从单链表中选择随机节点的程序。
我们需要从单链表中选择一个随机节点,因此需要知道链表的长度,然后从其中随机选择一个节点。
具体来说,我们可以先遍历一遍链表,统计其长度。然后,我们可以生成一个0到链表长度-1的随机数,遍历链表,找到第i个节点,其中i为随机生成的数值。
以下是一个用于从单链表中选择随机节点的Python程序:
import random
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def get_random_node(head: ListNode) -> int:
# 遍历链表,统计长度
length = 0
cur = head
while cur:
length += 1
cur = cur.next
# 生成随机数,选择节点
random_val = random.randint(1, length)
cur = head
for i in range(random_val):
cur = cur.next
return cur.val
代码中定义了一个ListNode
类作为单链表的节点类。get_random_node()
函数用于从单链表中选择随机节点,接受一个链表头节点head
作为输入,返回选择的随机节点的值。
我们先遍历链表,统计链表的长度length
。然后生成一个0到length
-1的随机数random_val
,遍历链表,找到第random_val
个节点,即为选择的随机节点。
Note: random
模块是Python中用来生成随机数的模块。
本文介绍了如何用Python实现从单链表中选择随机节点的程序,该算法的时间复杂度为O(n)。可以在链表算法中应用该算法。