c语言请按尾插法创建单链表,并删除指定位置的元素,输出删除完成后的链表。操作完成后释放单链表。 输入 输入包括三行 第一行输入单链表的长度 第二行输入单链表的元素 第三行输入要删除节点的位置 输出 输出删除完成后的单链表,每个输出之后空一格。 如果删除失败直接输出0
时间: 2024-09-16 17:03:00 浏览: 45
在 C 语言中,我们可以使用结构体表示单链表的节点,包含一个数据域和一个指向下一个节点的指针。以下是实现按尾插法创建单链表并删除指定位置节点的步骤:
1. 定义链表节点结构体:
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
```
2. 创建链表函数,按尾插入元素:
```c
ListNode* createList(int length) {
ListNode* head = NULL, *tail = NULL;
for (int i = 0; i < length; ++i) {
if (!head) {
head = tail = (ListNode*)malloc(sizeof(ListNode));
head->data = i + 1; // 假设从1开始计数
} else {
tail->next = (ListNode*)malloc(sizeof(ListNode));
tail = tail->next;
tail->data = i + 1;
}
}
return head;
}
```
3. 删除指定位置节点的函数:
```c
void deleteNode(ListNode** head, int position) {
if (*head == NULL) return;
ListNode* temp = *head;
ListNode* prev = NULL;
int index = 0;
while (temp != NULL && index < position - 1) {
prev = temp;
temp = temp->next;
index++;
}
if (temp == NULL || temp->next == NULL) {
printf("Delete failed: Index out of range\n");
return;
}
prev->next = temp->next;
free(temp);
}
```
4. 输出链表并释放内存:
```c
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
// 释放内存
ListNode* node = head;
while (node != NULL) {
ListNode* temp = node;
node = node->next;
free(temp);
}
}
```
5. 主程序:
```c
int main() {
int length;
scanf("%d", &length);
ListNode* list = createList(length);
int position;
scanf("%d", &position);
deleteNode(&list, position);
printList(list);
return 0;
}
```
注意:在实际运行程序时,需要处理输入验证(如确保删除位置有效),上述代码未做异常检查。
阅读全文