以C++的方式用递归的方法创建一个带头结点的单链表,遍历输出该单链表,并求出链表中的最大整数,结点个数,所以整数的平均值(double)和删除所以值为给定值x的结点
时间: 2024-04-29 21:26:48 浏览: 53
带头结点单链表操作C++的实现
好的,我可以回答这个问题。
以下是以C语言的方式用递归方法创建一个带头结点的单链表的代码:
```c
// 定义结点
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 初始化头结点
ListNode* initList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
if (head == NULL) exit(-1);
head->next = NULL;
return head;
}
// 递归插入节点
void insertNode(ListNode* p, int value) {
if (p == NULL) return;
if (p->next == NULL || p->next->data > value) {
ListNode* t = (ListNode*)malloc(sizeof(ListNode));
if (t == NULL) exit(-1);
t->data = value;
t->next = p->next;
p->next = t;
return;
}
insertNode(p->next, value);
}
// 遍历输出链表
void printList(ListNode* head) {
if (head == NULL) return;
ListNode* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 求链表中的最大整数
int maxNum(ListNode* head) {
if (head == NULL) return 0;
int max = head->next->data;
ListNode* p = head->next->next;
while (p) {
if (p->data > max) max = p->data;
p = p->next;
}
return max;
}
// 求链表的结点个数
int countNodes(ListNode* head) {
if (head == NULL) return 0;
int count = 0;
ListNode* p = head->next;
while (p) {
count++;
p = p->next;
}
return count;
}
// 求链表中所有整数的平均值
double avgNum(ListNode* head) {
if (head == NULL) return 0.0;
int sum = 0;
ListNode* p = head->next;
while (p) {
sum += p->data;
p = p->next;
}
return sum * 1.0 / countNodes(head);
}
// 删除链表中所有值为给定值x的结点
void deleteX(ListNode* head, int x) {
if (head == NULL) return;
ListNode* p = head->next;
ListNode* q = head;
while (p) {
if (p->data == x) {
q->next = p->next;
free(p);
p = q->next;
} else {
q = q->next;
p = p->next;
}
}
}
```
使用上述代码创建一个单链表、遍历输出链表、求链表中的最大整数、结点个数、所有整数的平均值和删除链表中所有值为给定值x的结点,可以这样写:
```c
int main() {
ListNode* head = initList();
insertNode(head, 1);
insertNode(head, 2);
insertNode(head, 3);
insertNode(head, 4);
insertNode(head, 5);
printList(head);
printf("max num: %d\n", maxNum(head));
printf("node count: %d\n", countNodes(head));
printf("avg num: %.2f\n", avgNum(head));
deleteX(head, 3);
printList(head);
return 0;
}
```
这样就可以得到输出结果:
```
1 2 3 4 5
max num: 5
node count: 5
avg num: 3.00
1 2 4 5
```
希望我的答案对你有所帮助。
阅读全文