用C语言编写:输入若干个正整数(输入-1 为结束标志),建立一个单向链表,再输入一个数m,插入第i个结点后面并输出链表。
时间: 2024-03-07 16:48:46 浏览: 79
C语言实现单向链表的创建、插入,删除节点,和2个链表合并
5星 · 资源好评率100%
好的,以下是用C语言编写的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点结构体
struct ListNode {
int val;
struct ListNode* next;
};
int main() {
// 初始化链表头结点
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->val = 0;
head->next = NULL;
struct ListNode* p = head;
// 读入若干个正整数并建立链表
int x;
while (1) {
scanf("%d", &x);
if (x == -1) break;
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = x;
node->next = NULL;
p->next = node;
p = node;
}
// 插入第i个结点后面
int i, m;
scanf("%d%d", &i, &m);
p = head->next;
while (i > 1 && p != NULL) {
p = p->next;
i--;
}
if (p != NULL) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = m;
node->next = p->next;
p->next = node;
}
// 输出链表
p = head->next;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
// 释放链表空间
p = head;
while (p != NULL) {
struct ListNode* tmp = p;
p = p->next;
free(tmp);
}
return 0;
}
```
注意,这里使用了动态内存分配来创建链表,并且在程序结束时需要手动释放链表空间。
阅读全文