用c语言计一个单链表,要求编程实现如下任务: (D)建立一个单链表。 (2)在第i个节点(L由键盘输入,i=0表示插入的结点作为第 1个结点)
时间: 2024-11-09 10:17:38 浏览: 8
在C语言中,我们可以使用结构体定义链表节点,并编写函数来创建、插入节点以及处理用户输入。首先,我们需要定义链表节点的结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
接下来,我们编写函数来实现各个任务:
- 初始化链表(D)
```c
Node* createList() {
Node* head = NULL; // 初始链表为空
return head;
}
```
- 插入节点到指定位置(2)
```c
void insertNode(Node** head, int i, int value) {
if (i < 0 || *head == NULL) {
printf("Invalid input. Please enter a valid position.\n");
return;
}
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = value;
newNode->next = NULL;
if (i == 0) { // 如果插入位置为第一个节点
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
for (int j = 0; j < i - 1 && current != NULL; j++) {
current = current->next;
}
if (current != NULL) {
newNode->next = current->next;
current->next = newNode;
} else {
printf("Insertion position out of range.\n");
}
}
}
```
最后,处理用户输入并调用上述函数:
```c
int main() {
Node* head = createList();
int position, value;
printf("Enter the position to insert and the value: ");
scanf("%d %d", &position, &value);
insertNode(&head, position - 1, value); // 减一是因为索引从0开始
// 打印链表验证是否成功
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
return 0;
}
```
阅读全文