c语言请按尾插法创建单链表,并在指定位置插入元素,输出插入完成后的链表 输入 输入包括三行 第一行输入单链表的长度 第二行输入单链表的元素 第三行输入插入的位置和插入的值 输出 输出插入完成后的单链表,若插入失败,输出-1。
时间: 2024-09-16 16:02:54 浏览: 16
在C语言中,我们可以使用结构体表示链表节点,并按照尾插法的方式在给定位置插入新元素。这里是一个简单的步骤:
首先,我们需要定义链表节点结构体:
```c
struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
};
```
然后,编写函数实现尾插法插入操作:
```c
void insertAtTail(struct Node** head, int position, int value) {
if (*head == NULL || position <= 0) { // 如果链表为空或位置无效,返回-1
printf("-1\n");
return;
}
// 创建新的节点并初始化
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
// 如果插入位置是第一个节点,直接指向新节点
if (position == 1) {
newNode->next = *head;
*head = newNode;
return;
}
// 遍历链表到指定位置 - 1
for (int i = 1; i < position && (*head != NULL); i++) {
(*head) = (*head)->next;
}
// 插入新节点
newNode->next = (*head)->next;
(*head)->next = newNode;
}
```
最后,在主函数中获取用户输入并调用该函数:
```c
int main() {
int length, position, value;
scanf("%d", &length);
// 初始化链表
struct Node* head = NULL;
// 获取链表元素
for (int i = 0; i < length; i++) {
int temp;
scanf("%d", &temp);
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = temp;
newNode->next = NULL;
// 链表为空或者第一次插入
if (head == NULL) {
head = newNode;
} else {
struct Node* lastNode = head;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}
scanf("%d %d", &position, &value);
insertAtTail(&head, position, value);
// 输出链表,这里需要自行添加遍历打印链表的功能
// ...
return 0;
}
```
请注意,这个程序仅处理了插入成功的情况。如果要在实际应用中,你需要确保内存分配成功,并在适当的地方释放不再使用的内存。此外,上述示例假设用户提供的位置可以整除链表,如果可能的话,还需要对输入进行验证以防止越界。