1)建立一个线性链表,其元素值依次为从键盘输入的正整数(以输入一个负数结束)请依次输入3、5、8、4、7、2、6、-1.(P54)。 2)在7的前面新插入一个元素9。 3)删除元素2. 用c语言依次输出各节点的值。
时间: 2024-10-12 21:10:40 浏览: 21
在C语言中,我们可以使用结构体来创建链表,并通过指针实现链表的操作。这里是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 创建新节点并分配内存
struct Node* createNode(int value) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 在链表头部插入节点
void insertAtBeginning(struct Node** head, int value) {
struct Node* newNode = createNode(value);
if (newNode != NULL) {
newNode->next = *head;
*head = newNode;
}
}
// 删除指定值的节点
void deleteNode(struct Node** head, int value) {
if (*head == NULL) {
return;
}
if ((*head)->data == value) {
struct Node* temp = *head;
*head = (*head)->next;
free(temp);
return;
}
struct Node* current = *head;
while (current->next != NULL && current->next->data != value) {
current = current->next;
}
if (current->next != NULL) {
struct Node* temp = current->next;
current->next = temp->next;
free(temp);
}
}
// 打印链表节点的值
void printList(struct Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
struct Node* head = NULL;
// 输入节点并添加到链表
int input;
do {
scanf("%d", &input);
if (input > 0) {
insertAtBeginning(&head, input);
}
} while (input >= 0);
// 插入新的节点
insertAtBeginning(&head, 9);
// 删除指定节点
deleteNode(&head, 2);
// 输出链表的值
printList(head);
return 0;
}
```
当你运行这个程序,它会按照你的描述创建链表,然后插入新节点和删除指定节点,最后打印出链表的值。
阅读全文