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

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

用于从单链表中选择随机节点的 C++ 程序介绍

本篇介绍了一个用于从单链表中选择随机节点的 C++ 程序。在这个程序中,我们将通过随机数生成器来选择一个随机节点,并返回该节点的值。

程序概述

我们将首先给出程序的整体结构和主要步骤:

  1. 定义节点类和链表类
  2. 实现链表的插入操作
  3. 实现一个随机数生成器函数
  4. 实现选择随机节点的函数
  5. 在主函数中测试程序

现在,我们将逐一介绍这些步骤。

节点类和链表类定义

首先,我们需要定义节点类和链表类。节点类是链表中的基本单位,它包含一个值和指向下一个节点的指针。链表类则是由节点组成的一个线性结构。

以下是节点类和链表类的定义:

class ListNode {
public:
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class LinkedList {
public:
    ListNode *head;
    LinkedList() : head(NULL) {}

    void insert(int val);
};
链表的插入操作

链表的插入操作是将一个新节点插入链表中的特定位置。在本程序中,我们实现了一个简单的尾部插入操作。

void LinkedList::insert(int val) {
    ListNode *newNode = new ListNode(val);

    if (head == NULL) {
        head = newNode;
        return;
    }

    ListNode *cur = head;
    while (cur->next != NULL) {
        cur = cur->next;
    }

    cur->next = newNode;
}
随机数生成器函数

为了从链表中选择随机节点,我们需要实现一个随机数生成器函数。该函数将返回一个介于0和链表长度之间的随机数。

int getRandom(int range) {
    return rand() % range;
}
选择随机节点的函数

现在我们可以实现选择随机节点的函数了。该函数将使用随机数生成器函数来生成一个随机索引,并遍历链表直到该索引位置,返回该位置上节点的值。

下面是选择随机节点的函数的实现:

int getRandomNode(LinkedList *list) {
    int length = 0;
    ListNode *cur = list->head;
    while (cur != NULL) {
        cur = cur->next;
        length++;
    }

    int randomIndex = getRandom(length);

    cur = list->head;
    for (int i = 0; i < randomIndex; i++) {
        cur = cur->next;
    }

    return cur->val;
}
主函数中的测试

最后,我们可以在主函数中测试我们的程序。我们将创建一个链表,插入一些值,并打印选择的随机节点的值。

int main() {
    LinkedList list;

    list.insert(1);
    list.insert(2);
    list.insert(3);
    list.insert(4);
    list.insert(5);

    int randomNode = getRandomNode(&list);
    cout << "Random node from the list: " << randomNode << endl;

    return 0;
}

以上就是这个用于从单链表中选择随机节点的 C++ 程序的详细介绍。通过这个程序,我们可以从一个单链表中选择一个随机节点。程序使用了随机数生成器函数和链表的插入操作来完成这一过程。如果你有兴趣,你可以根据这个程序进行扩展和修改。