请按尾插法创建单链表,并删除指定位置的元素,输出删除完成后的链表。操作完成后释放单链表。 输入 输入包括三行 第一行输入单链表的长度 第二行输入单链表的元素 第三行输入要删除节点的位置 输出 输出删除完成后的单链表,每个输出之后空一格。 如果删除失败直接输出0 用c实现
时间: 2024-09-20 20:02:17 浏览: 31
尾插法创建单链表PPT学习教案.pptx
在C语言中,我们可以使用结构体表示单链表节点,并通过指针连接它们。以下是按尾插法创建单链表、删除指定位置元素并释放内存的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 创建新节点函数
ListNode* createNode(int val) {
ListNode *node = (ListNode*)malloc(sizeof(ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 尾插法插入节点到链表尾部
void insertAtTail(ListNode **head, int val) {
if (*head == NULL) {
*head = createNode(val);
} else {
ListNode *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = createNode(val);
}
}
// 删除指定位置节点
void deleteNode(ListNode **head, int position) {
if (*head == NULL) {
printf("0\n");
return;
}
ListNode *prev = *head;
ListNode *current = *head->next;
int index = 1;
while (current != NULL && index < position) {
prev = current;
current = current->next;
index++;
}
// 如果找不到要删除的节点
if (current == NULL || current->next == NULL) {
printf("0\n");
return;
}
// 删除当前节点
prev->next = current->next;
free(current); // 释放已删除节点的内存
// 输出剩余链表
printLinkedList(*head);
}
// 打印链表
void printLinkedList(ListNode *head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
printf("\n");
}
int main() {
int length;
scanf("%d", &length);
// 创建链表
ListNode *head = NULL;
for (int i = 0; i < length; i++) {
int val;
scanf("%d", &val);
insertAtTail(&head, val);
}
int position;
scanf("%d", &position);
deleteNode(&head, position);
return 0;
}
```
在这个代码中,我们首先读取链表的长度和元素,然后按顺序插入元素到链表尾部。接着读取需要删除的节点位置,并尝试从链表中找到该位置的节点进行删除。删除成功后,我们打印出删除后的链表。如果没有找到或者删除失败,我们会输出0。
运行这个程序时,记得在每次读取节点位置之前检查链表是否为空,因为如果在删除第一个节点时输入的位置是1,那么会直接报错。在`main`函数结束前,未显示的链表部分会被回收,因为我们不再引用它。
阅读全文