在c语言中实现在已知链表中的第三个位置插入数字为a的程序
c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建一个新节点
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (!newNode) {
printf("Memory allocation failed!\n");
exit(1);
}
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 在链表的第三个位置插入节点
void insertAtThirdPosition(ListNode** head, int a) {
if (*head == NULL || (*head)->next == NULL || (*head)->next->next == NULL) {
// 如果链表长度小于3,则不能直接插入到第三个位置
printf("The list does not have enough nodes to insert at the third position.\n");
return;
}
ListNode* newNode = createNode(a);
ListNode* temp = *head;
// 移动到第二个节点
temp = temp->next;
// 插入新节点到第三个位置
newNode->next = temp->next;
temp->next = newNode;
}
// 打印链表
void printList(ListNode* head) {
ListNode* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->val);
temp = temp->next;
}
printf("NULL\n");
}
// 主函数
int main() {
// 创建一个简单的链表 1 -> 2 -> 3 -> 4
ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
// 在第三个位置插入值为5的节点
insertAtThirdPosition(&head, 5);
// 打印链表
printList(head);
// 释放链表内存(略)
return 0;
}