📌  相关文章
📜  用于从单链表中选择随机节点的Python程序(1)

📅  最后修改于: 2023-12-03 14:56:19.181000             🧑  作者: Mango

用于从单链表中选择随机节点的Python程序

在处理链表的算法问题时,有时需要随机选择链表中的一个节点。本文将介绍如何用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)。可以在链表算法中应用该算法。