C++程序 编程写一个获取链表中第N个节点的函数
什么是链表?
链表是一种常用的数据结构之一,特别适合插入和删除操作频繁的场合。链表由多个节点组成,每个节点都有一个指向下一个节点的指针。
C++实现链表
在C++中,可以通过定义一个结构体来实现链表:
struct Node {
int data;
Node *next;
};
上面的结构体表示每个节点都有一个整数类型的数据,和一个指向下一个节点的指针。
现在我们可以定义一个指向链表头节点的指针:
Node *head = NULL;
这样,我们就创建了一个空链表。
接下来,我们可以通过添加节点的方式来构建链表:
void addNode(int data) {
Node *newNode = new Node;
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
上面的代码中,我们定义了一个addNode函数,用于向链表末尾添加一个节点。首先,我们通过new关键字动态分配了一个空间来存储节点的数据和指针,并设置指针为NULL。如果链表为空,表示这是第一个节点,我们将head指针指向新节点。否则,我们遍历链表,将新节点加入到链表最后。
现在,我们已经定义了一个链表,并且可以往链表中添加节点了。
实现获取链表中第N个节点的函数
现在,我们要实现一个函数,用于返回链表中第N个节点的数据。假设第一个节点的编号为1,如何实现这个功能呢?
下面是一个完整的代码实现,用于获取链表中第N个节点的数据:
int getNthNode(int n) {
Node *temp = head;
int count = 1;
while (temp != NULL) {
if (count == n) {
return(temp->data);
}
count++;
temp = temp->next;
}
assert(0);
}
上面的代码中,我们定义了一个getNthNode函数,用于获取链表中第N个节点的数据。首先,我们定义了一个指针temp指向链表头节点,将计数器count初始化为1。然后,我们用while循环遍历链表,通过比较计数器与N的大小关系,来确定链表中第N个节点。如果找到了第N个节点,函数就返回这个节点的数据。否则,继续遍历链表。如果遍历了整个链表都没有找到第N个节点,我们使用assert()函数来断言程序中断,避免程序继续运行下去。
现在,我们可以在主函数中测试这个函数了,如下所示:
int main() {
addNode(1);
addNode(2);
addNode(3);
addNode(4);
addNode(5);
cout << "The 3rd node value is " << getNthNode(3) << endl;
return 0;
}
上面的代码中,我们调用了addNode函数来添加5个节点。然后,我们通过调用getNthNode函数,来获取链表中第3个节点的数据,输出结果为:
The 3rd node value is 3
完整代码
下面是完整的代码实现:
#include <iostream>
#include <cassert>
using namespace std;
struct Node {
int data;
Node *next;
};
Node *head = NULL;
void addNode(int data) {
Node *newNode = new Node;
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
head = newNode } else {
Node *temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
int getNthNode(int n) {
Node *temp = head;
int count = 1;
while (temp != NULL) {
if (count == n) {
return(temp->data);
}
count++;
temp = temp->next;
}
assert(0);
}
int main() {
addNode(1);
addNode(2);
addNode(3);
addNode(4);
addNode(5);
cout << "The 3rd node value is " << getNthNode(3) << endl;
return 0;
}
结论
通过本文,我们了解了如何使用C++编程来实现一个获取链表中第N个节点的函数。我们通过动态分配空间的方式来创建了一个链表,并实现了往链表中添加节点的功能。然后,我们定义了一个函数,通过遍历链表来获取指定节点的数据,并在主函数中测试了这个函数的正确性。