函数insert的参数head接收一个链表的头指针,该链表保存统计结果,全部结点按照data成员的值从大到小有序。 函数insert的功能是对参数ch中保存的字符做下述处理:如果该字符已保存在head指向的链表中,则对保存该字符的 结点中的count成员做加1运算;如果该字符不在链表中,则生成一个新结点用于保存该字符的统计结果,并将新结点 插入链表,插入新结点后链表中的结点仍然按照data成员的值从大到小有序。
时间: 2023-12-03 11:45:10 浏览: 49
下面是一个参考实现:
```c++
struct Node {
char data; // 字符
int count; // 统计次数
Node *next; // 指向下一个结点的指针
};
void insert(Node *head, char ch) {
Node *prev = head; // prev 指向当前结点的前一个结点
Node *curr = head->next; // curr 指向当前结点
while (curr != nullptr && curr->data > ch) {
prev = curr;
curr = curr->next;
}
if (curr != nullptr && curr->data == ch) {
curr->count++;
} else {
Node *newNode = new Node{ch, 1, curr};
prev->next = newNode;
}
}
```
该函数首先遍历链表,找到第一个data小于等于ch的结点curr和它的前一个结点prev。如果curr的data等于ch,则将curr的count加1;否则,在prev和curr之间插入一个新的结点newNode,它的data为ch,count为1,next为curr。由于链表头结点是一个特殊的结点,它的data为空字符且count为0,所以在实际使用时,应该传入链表头结点的next指针作为参数。
阅读全文