c语言使用尾插法建立一张带头结点的单链表L,并使L的长度大于10 删除单链表L的第4个结点
时间: 2023-09-22 21:11:59 浏览: 103
好的,您的问题是如何使用尾插法建立一张带头结点的单链表L,并使L的长度大于10,然后删除单链表L的第4个结点。
以下是 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node, *LinkedList;
LinkedList CreateList(int n); // 使用尾插法创建长度为 n 的单链表
void DeleteNode(LinkedList L, int pos); // 删除单链表 L 中第 pos 个结点
void PrintList(LinkedList L); // 打印单链表 L 中的元素
int main() {
LinkedList L = CreateList(11); // 创建长度为 11 的单链表 L
printf("删除前:");
PrintList(L);
DeleteNode(L, 4); // 删除单链表 L 中第 4 个结点
printf("删除后:");
PrintList(L);
return 0;
}
LinkedList CreateList(int n) {
LinkedList L = (LinkedList)malloc(sizeof(Node)); // 头结点
L->next = NULL;
Node* tail = L;
srand(time(0));
for (int i = 0; i < n; i++) {
Node* p = (Node*)malloc(sizeof(Node));
p->data = rand() % 100 + 1;
tail->next = p;
tail = p;
}
tail->next = NULL;
return L;
}
void DeleteNode(LinkedList L, int pos) {
Node* p = L;
for (int i = 1; i < pos; i++) {
p = p->next;
}
Node* q = p->next;
p->next = q->next;
free(q);
}
void PrintList(LinkedList L) {
Node* p = L->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
```
实现思路:
使用尾插法创建单链表 L 长度为 n:从头结点 L 开始,利用 tail 指针指向单链表的尾部,每次插入一个新的结点时,都让 tail 指向新结点。
删除单链表 L 中第 pos 个结点:从头结点 L 开始,找到第 pos - 1 个结点 p,再让 q 指向 p 的下一个结点,然后将 p 的 next 指向 q 的下一个结点,最后释放 q。
运行结果:
```output
删除前:92 51 55 20 49 60 21 67 92 54 26
删除后:92 51 55 49 60 21 67 92 54 26
```
阅读全文