输入若干个正整数(输入-1 为结束标志),建立一个单向链表,再输入一个数m,插入第i个结点后面,并输出链表。试使用c语言编写相应程序
时间: 2024-03-07 20:48:56 浏览: 74
单向链表 结点的插入、筛选、排序等
5星 · 资源好评率100%
以下是使用C语言编写的程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 数据域
struct Node *next; // 指针域
} Node;
// 创建链表
Node *createList() {
Node *head = (Node *)malloc(sizeof(Node)); // 头节点不存储数据
head->next = NULL;
Node *tail = head; // 尾指针指向头节点
int num;
printf("请输入若干个正整数,以-1为结束标志:\n");
scanf("%d", &num);
while (num != -1) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = num;
newNode->next = NULL;
tail->next = newNode;
tail = newNode;
scanf("%d", &num);
}
return head;
}
// 插入节点
void insertNode(Node *head, int i, int m) {
Node *p = head;
int j = 0;
while (p && j < i - 1) { // 找到第i个节点的前一个节点
p = p->next;
j++;
}
if (!p || j > i - 1) { // i不合法,插入失败
printf("插入失败,i不合法!\n");
return;
}
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = m;
newNode->next = p->next;
p->next = newNode;
}
// 输出链表
void printList(Node *head) {
Node *p = head->next; // p指向第一个节点
printf("链表:");
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
Node *head = createList();
printList(head);
int i, m;
printf("请输入要插入的位置和数m,用空格分隔:\n");
scanf("%d %d", &i, &m);
insertNode(head, i, m);
printList(head);
return 0;
}
```
运行程序后,按照提示输入若干个正整数,以-1为结束标志。然后输入要插入的位置和数m,程序会在第i个节点后面插入一个值为m的节点,并输出链表。
阅读全文