3.删除单链表中第i个元素,并输出删除后的单链表中各元素值。用c语言编写
时间: 2024-05-16 12:17:24 浏览: 112
C语言数据结构 单链表的删除算法
5星 · 资源好评率100%
以下是删除单链表中第i个元素的代码(假设头结点为第0个元素):
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 在单链表头部插入节点
ListNode* insertAtHead(ListNode* head, int val) {
ListNode* newHead = (ListNode*)malloc(sizeof(ListNode));
newHead->val = val;
newHead->next = head;
return newHead;
}
// 删除单链表中第i个元素
ListNode* deleteAtIndex(ListNode* head, int index) {
if (head == NULL) { // 特判空链表
return NULL;
}
if (index == 0) { // 特判删除头结点
ListNode* newHead = head->next;
free(head);
return newHead;
}
ListNode* prev = head;
for (int i = 0; i < index - 1; i++) { // 找到要删除节点的前一个节点
prev = prev->next;
if (prev == NULL) { // 特判下标越界
return head;
}
}
ListNode* toDelete = prev->next;
if (toDelete == NULL) { // 特判下标越界
return head;
}
prev->next = toDelete->next;
free(toDelete);
return head;
}
// 输出单链表中各元素值
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->val);
head = head->next;
}
}
int main() {
// 创建单链表 1 -> 2 -> 3 -> 4 -> 5
ListNode* head = NULL;
head = insertAtHead(head, 5);
head = insertAtHead(head, 4);
head = insertAtHead(head, 3);
head = insertAtHead(head, 2);
head = insertAtHead(head, 1);
// 删除单链表中第3个元素
head = deleteAtIndex(head, 2);
// 输出删除后的单链表中各元素值
printList(head);
return 0;
}
```
输出结果为:1 2 4 5。
阅读全文