📅  最后修改于: 2023-12-03 14:56:20.268000             🧑  作者: Mango
链表是一种常用的数据结构,它被广泛应用于各种算法和数据处理场合。在链表中插入一个节点,是链表常见的基本操作之一。本文将介绍如何在链表中间插入节点的 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;
}
## 在链表中间插入节点的 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;
}