C++程序 编程写一个获取链表中第N个节点的函数

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个节点的函数。我们通过动态分配空间的方式来创建了一个链表,并实现了往链表中添加节点的功能。然后,我们定义了一个函数,通过遍历链表来获取指定节点的数据,并在主函数中测试了这个函数的正确性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例