📅  最后修改于: 2023-12-03 14:56:19.166000             🧑  作者: Mango
本篇介绍了一个用于从单链表中选择随机节点的 C++ 程序。在这个程序中,我们将通过随机数生成器来选择一个随机节点,并返回该节点的值。
我们将首先给出程序的整体结构和主要步骤:
现在,我们将逐一介绍这些步骤。
首先,我们需要定义节点类和链表类。节点类是链表中的基本单位,它包含一个值和指向下一个节点的指针。链表类则是由节点组成的一个线性结构。
以下是节点类和链表类的定义:
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++ 程序的详细介绍。通过这个程序,我们可以从一个单链表中选择一个随机节点。程序使用了随机数生成器函数和链表的插入操作来完成这一过程。如果你有兴趣,你可以根据这个程序进行扩展和修改。