(1)写一算法正向创建含 n 个的结点的单链表 L 。
函数原型语句: void creat _ L ( LinkList & L , int n );
(2)在单链表第 i 个位置插入一结点 s 。
函数原型语句: void ListInsert _ L ( LinkList & L , int i );
(3)要求写一主函数,实现对以上两个函数的调用。
单链表的存储结构如下:
typedef struct LNode {
Elem Type data ;
struct LNode * next ;
} LNode ,* LinkList ;
【以下回答由 GPT 生成】
创建单链表的步骤如下:
实现如下:
void create_L(LinkList &L, int n) {
L = new LNode; // 创建头结点
L->next = NULL; // 初始化链表为空
LNode *p, *q;
q = L;
for (int i = 0; i < n; i++) {
p = new LNode; // 创建新结点
cout << "请输入第 " << i+1 << " 个结点的值:";
cin >> p->data; // 输入结点的值
p->next = NULL;
q->next = p; // 将新结点插入到链表的尾部
q = p; // 移动q指针到链表尾部
}
}
在单链表的第i个位置插入一个结点的步骤如下:
实现如下:
void ListInsert_L(LinkList &L, int i) {
if (i < 1) {
cout << "插入位置无效!" << endl;
return;
}
LNode *p = L;
int j = 0;
while (p != NULL && j < i-1) {
p = p->next; // 查找第i-1个结点
j++;
}
if (p == NULL) {
cout << "插入位置无效!" << endl;
return;
}
LNode *s = new LNode;
cout << "请输入要插入的结点的值:";
cin >> s->data; // 输入要插入的结点的值
s->next = p->next;
p->next = s;
}
主函数调用以上两个函数的操作如下:
主函数实现如下:
int main() {
LinkList L;
int n, i;
cout << "请输入要创建的链表长度:";
cin >> n;
create_L(L, n);
cout << "请输入要插入新结点的位置:";
cin >> i;
ListInsert_L(L, i);
return 0;
}
以上三个函数的完整代码如下所示:
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
} LNode, *LinkList;
// 创建单链表
void create_L(LinkList &L, int n) {
L = new LNode; // 创建头结点
L->next = NULL; // 初始化链表为空
LNode *p, *q;
q = L;
for (int i = 0; i < n; i++) {
p = new LNode; // 创建新结点
cout << "请输入第 " << i+1 << " 个结点的值:";
cin >> p->data; // 输入结点的值
p->next = NULL;
q->next = p; // 将新结点插入到链表的尾部
q = p; // 移动q指针到链表尾部
}
}
// 在单链表的第i个位置插入一个结点
void ListInsert_L(LinkList &L, int i) {
if (i < 1) {
cout << "插入位置无效!" << endl;
return;
}
LNode *p = L;
int j = 0;
while (p != NULL && j < i-1) {
p = p->next; // 查找第i-1个结点
j++;
}
if (p == NULL) {
cout << "插入位置无效!" << endl;
return;
}
LNode *s = new LNode;
cout << "请输入要插入的结点的值:";
cin >> s->data; // 输入要插入的结点的值
s->next = p->next;
p->next = s;
}
int main() {
LinkList L;
int n, i;
cout << "请输入要创建的链表长度:";
cin >> n;
create_L(L, n);
cout << "请输入要插入新结点的位置:";
cin >> i;
ListInsert_L(L, i);
return 0;
}
运行结果示例:
请输入要创建的链表长度:3 请输入第 1 个结点的值:1 请输入第 2 个结点的值:2 请输入第 3 个结点的值:3 请输入要插入新结点的位置:2 请输入要插入的结点的值:4
链表的最终结果为:1->4->2->3。
注:以上的代码示例使用的是C++语言进行编写,如果你习惯使用其他编程语言(如Java、Python等),可以根据思路进行相应的调整和实现。