关于#数据结构#的问题,请各位专家解答!
单链表插入节点
问题如下
【以下回答由 GPT 生成】
首先,我们需要在createLinkList函数中实现正向创建含n个节点的单链表。下面是一个可以实现该功能的代码示例:
void createLinkList(LinkList &L, int n) {
LNode *p; // 定义指向当前节点的指针
LNode *q; // 定义指向新节点的指针
L = new LNode; // 创建头结点
L->next = NULL; // 头结点指针域置为空
p = L; // 将p指向头结点
for (int i = 0; i < n; i++) {
q = new LNode; // 创建新节点
q->data = i + 1; // 新节点的数据域赋值
p->next = q; // 将当前节点的指针域指向新节点
p = q; // 将p指向新节点
}
p->next = NULL; // 最后一个节点的指针域设为NULL
}
接下来,我们需要在listInsert函数中实现在第i个位置插入节点的功能。下面是一个可以实现该功能的代码示例:
void listInsert(LinkList &L, int i) {
LNode *p = L; // 定义指向当前节点的指针
int j = 0;
while (p && j < i - 1) { // 寻找第i-1个节点
p = p->next;
j++;
}
if (!p || j > i - 1) {
cout << "插入位置错误" << endl;
return;
}
LNode *q = new LNode; // 创建新节点
q->data = i; // 新节点数据域赋值
q->next = p->next; // 将新节点的指针域指向当前节点的后继节点
p->next = q; // 将当前节点的指针域指向新节点
}
完整代码如下:
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode *next;
} LinkList;
void createLinkList(LinkList &L, int n) {
LNode *p;
LNode *q;
L = new LNode;
L->next = NULL;
p = L;
for (int i = 0; i < n; i++) {
q = new LNode;
q->data = i + 1;
p->next = q;
p = q;
}
p->next = NULL;
}
void listInsert(LinkList &L, int i) {
LNode *p = L;
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || j > i - 1) {
cout << "插入位置错误" << endl;
return;
}
LNode *q = new LNode;
q->data = i;
q->next = p->next;
p->next = q;
}
int main() {
int n = 10;
LinkList L;
createLinkList(L, n);
int i = 5;
listInsert(L, i);
LNode *p = L->next; // p指向第一个节点
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
return 0;
}
运行该代码,输出为:1 2 3 4 5 6 7 8 9 5 10。表示成功地创建了一个含有10个节点的单链表,并在第5个位置插入了一个新节点。
【相关推荐】