1.构造一个链表L-包含以下几点-a.对链表动态分配内存-b.初始化单链表--c.创建单链表(头插法创建、尾插法创建)d.完成链表某一位的取值-e.在链表的某一位进行插入操作-f.对于链表中元素进行遍历,
下面代码你可以参考 跑一下 没问题可采纳
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int data; // 节点数据
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 初始化链表
void initList(ListNode** head) {
*head = NULL; // 将头指针置为空
}
// 创建链表(头插法)
void createListHead(ListNode** head, int data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 动态分配内存
newNode->data = data; // 设置节点数据
newNode->next = *head; // 将新节点插入到链表头部
*head = newNode; // 更新头指针
}
// 创建链表(尾插法)
void createListTail(ListNode** head, int data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 动态分配内存
newNode->data = data; // 设置节点数据
newNode->next = NULL; // 将新节点置为尾节点
if (*head == NULL) { // 如果链表为空
*head = newNode; // 将头指针指向新节点
} else {
ListNode* tail = *head;
while (tail->next != NULL) { // 找到尾节点
tail = tail->next;
}
tail->next = newNode; // 将新节点插入到尾节点后面
}
}
// 获取链表某一位的值
int getListNode(ListNode* head, int index) {
ListNode* p = head;
int i = 0;
while (p != NULL && i < index) { // 遍历链表
p = p->next;
i++;
}
if (p == NULL) { // 如果链表为空或者索引超出范围
return -1;
} else {
return p->data; // 返回节点数据
}
}
// 在链表某一位进行插入操作
void insertListNode(ListNode** head, int index, int data) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); // 动态分配内存
newNode->data = data; // 设置节点数据
if (index == 0) { // 如果插入到链表头部
newNode->next = *head;
*head = newNode;
} else {
ListNode* p = *head;
int i = 0;
while (p != NULL && i < index - 1) { // 找到插入位置的前一个节点
p = p->next;
i++;
}
if (p == NULL) { // 如果索引超出范围
free(newNode); // 释放新节点内存
return;
}
newNode->next = p->next; // 将新节点插入到链表中
p->next = newNode;
}
}
// 遍历链表
void traverseList(ListNode* head) {
ListNode* p = head;
while (p != NULL) { // 遍历链表
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
ListNode* head;
initList(&head);
createListHead(&head, 1);
createListHead(&head, 2);
createListTail(&head, 3);
createListTail(&head, 4);
printf("List: ");
traverseList(head);
printf("Node at index 2: %d\n", getListNode(head, 2));
insertListNode(&head, 2, 5);
printf("List after inserting 5 at index 2: ");
traverseList(head);
return 0;
}
我会解决以上所有问题。