📌  相关文章
📜  用于在链表中间插入节点的 C++ 程序(1)

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

在链表中间插入节点的 C++ 程序

链表是一种常用的数据结构,它被广泛应用于各种算法和数据处理场合。在链表中插入一个节点,是链表常见的基本操作之一。本文将介绍如何在链表中间插入节点的 C++ 程序。

链表的定义和插入节点操作

链表结构可以用 C++ 中的类来表示。下面是一个简单的单向链表定义:

class ListNode{
public:
    int val;  //节点数值
    ListNode *next; //下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}
};

上面的代码定义了一个节点的结构,包括节点的值和指向下一个节点的指针。其中,ListNode(int x)是节点的初始化函数,通过该函数可以快速创建一个新节点。

为了在链表中插入一个节点,我们需要提供要插入的节点的数值。下面是一个在链表中间插入节点的函数:

void InsertNode(ListNode* head, int val, int pos){
    ListNode* newNode = new ListNode(val);// 创建一个新节点
    ListNode* p = head;// 定义指针p,指向头节点
    int i = 0;
    while (p && i < pos - 1) {
        p = p->next;
        ++i;
    }
    if (p == NULL || i != pos - 1) {// 如果目标位置不存在,则返回
        return;
    }
    newNode->next = p->next;
    p->next = newNode;
}

上面的代码定义了一个在链表中插入节点的函数 InsertNode,它包含三个参数。第一个参数是链表的头节点指针,第二个参数是要插入的节点的数值,第三个参数是要插入的位置。

该函数的实现方法很简单。首先创建一个新节点,然后将指针 p 指向头节点。接着用循环找到目标位置。在找到目标位置之后,将新节点的 next 指针指向当前节点 p 的 next 指针,将当前节点 p 的 next 指针指向新节点。

完整代码

下面是完整的 C++ 代码,包括链表的定义和在链表中间插入节点的代码:

#include<iostream>
using namespace std;

class ListNode{
public:
    int val;  //节点数值
    ListNode *next; //下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}
};

// 在链表中间插入节点
void InsertNode(ListNode* head, int val, int pos){
    ListNode* newNode = new ListNode(val);// 创建一个新节点
    ListNode* p = head;// 定义指针p,指向头节点
    int i = 0;
    while (p && i < pos - 1) {
        p = p->next;
        ++i;
    }
    if (p == NULL || i != pos - 1) {// 如果目标位置不存在,则返回
        return;
    }
    newNode->next = p->next;
    p->next = newNode;
}

int main() {
    // 创建链表
    ListNode * head = new ListNode(0);
    ListNode * p = head;
    for (int i = 1; i < 5; i++) {
        ListNode * tmp = new ListNode(i);
        p->next = tmp;
        p = tmp;
    }

    // 在链表中插入一个节点
    InsertNode(head, 10, 2);

    // 遍历链表并输出结果
    p = head;
    while (p) {
        cout << p->val << " ";
        p = p->next;
    }
    cout << endl;

    // 释放链表内存
    p = head;
    while (p) {
        head = head->next;
        delete p;
        p = head;
    }

    return 0;
}
Markdown 返回
## 在链表中间插入节点的 C++ 程序

链表是一种常用的数据结构,它被广泛应用于各种算法和数据处理场合。在链表中插入一个节点,是链表常见的基本操作之一。本文将介绍如何在链表中间插入节点的 C++ 程序。

### 链表的定义和插入节点操作

链表结构可以用 C++ 中的类来表示。下面是一个简单的单向链表定义:

```c++
class ListNode{
public:
    int val;  //节点数值
    ListNode *next; //下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}
};

上面的代码定义了一个节点的结构,包括节点的值和指向下一个节点的指针。其中,ListNode(int x)是节点的初始化函数,通过该函数可以快速创建一个新节点。

为了在链表中插入一个节点,我们需要提供要插入的节点的数值。下面是一个在链表中间插入节点的函数:

void InsertNode(ListNode* head, int val, int pos){
    ListNode* newNode = new ListNode(val);// 创建一个新节点
    ListNode* p = head;// 定义指针p,指向头节点
    int i = 0;
    while (p && i < pos - 1) {
        p = p->next;
        ++i;
    }
    if (p == NULL || i != pos - 1) {// 如果目标位置不存在,则返回
        return;
    }
    newNode->next = p->next;
    p->next = newNode;
}

上面的代码定义了一个在链表中插入节点的函数 InsertNode,它包含三个参数。第一个参数是链表的头节点指针,第二个参数是要插入的节点的数值,第三个参数是要插入的位置。

该函数的实现方法很简单。首先创建一个新节点,然后将指针 p 指向头节点。接着用循环找到目标位置。在找到目标位置之后,将新节点的 next 指针指向当前节点 p 的 next 指针,将当前节点 p 的 next 指针指向新节点。

完整代码

下面是完整的 C++ 代码,包括链表的定义和在链表中间插入节点的代码:

#include<iostream>
using namespace std;

class ListNode{
public:
    int val;  //节点数值
    ListNode *next; //下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}
};

// 在链表中间插入节点
void InsertNode(ListNode* head, int val, int pos){
    ListNode* newNode = new ListNode(val);// 创建一个新节点
    ListNode* p = head;// 定义指针p,指向头节点
    int i = 0;
    while (p && i < pos - 1) {
        p = p->next;
        ++i;
    }
    if (p == NULL || i != pos - 1) {// 如果目标位置不存在,则返回
        return;
    }
    newNode->next = p->next;
    p->next = newNode;
}

int main() {
    // 创建链表
    ListNode * head = new ListNode(0);
    ListNode * p = head;
    for (int i = 1; i < 5; i++) {
        ListNode * tmp = new ListNode(i);
        p->next = tmp;
        p = tmp;
    }

    // 在链表中插入一个节点
    InsertNode(head, 10, 2);

    // 遍历链表并输出结果
    p = head;
    while (p) {
        cout << p->val << " ";
        p = p->next;
    }
    cout << endl;

    // 释放链表内存
    p = head;
    while (p) {
        head = head->next;
        delete p;
        p = head;
    }

    return 0;
}
参考资料