c语言删除单链表(带头结点,头插入法建立单链表)的第i个结点
时间: 2024-05-10 15:20:15 浏览: 130
单向链表结点的逐个删除-C语言教程
以下是删除单链表第i个结点的C语言代码,其中假设单链表的头结点为head:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 头插入法建立单链表
Node* createList(int n) {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
for (int i = 0; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
printf("请输入第%d个结点的值:", i + 1);
scanf("%d", &(newNode->data));
newNode->next = head->next;
head->next = newNode;
}
return head;
}
// 删除第i个结点
void deleteNode(Node* head, int i) {
Node* p = head;
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || !p->next) return; // 第i个结点不存在
Node* delNode = p->next;
p->next = delNode->next;
free(delNode);
}
// 打印单链表
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
int n, i;
printf("请输入单链表的长度:");
scanf("%d", &n);
Node* head = createList(n);
printf("请输入要删除的结点位置:");
scanf("%d", &i);
deleteNode(head, i);
printf("删除后的单链表为:");
printList(head);
return 0;
}
```
代码解释:
1. `createList()`函数使用头插入法建立单链表,返回头结点指针。
2. `deleteNode()`函数接受一个头结点指针和一个整数i,表示要删除第i个结点。首先遍历单链表找到第i-1个结点,然后将其next指针指向第i+1个结点,最后释放第i个结点的内存空间。
3. `printList()`函数用于打印单链表,从头结点的next开始遍历输出每个结点的值。
4. `main()`函数中读入单链表的长度和要删除的结点位置,然后调用`createList()`函数建立单链表,调用`deleteNode()`函数删除第i个结点,最后调用`printList()`函数打印删除后的单链表。
阅读全文