统计单链表中字符个数并删除重复字符结点 void DeleteDup(LinkList L) {
时间: 2023-05-26 12:01:57 浏览: 157
链表节点的定义如下:
```c++
struct ListNode {
char data;
ListNode *next;
};
```
先定义一个指向头节点的指针变量p,初始化为头节点。
遍历整个链表,对于每个节点,定义一个指针变量q,初始化指向它的下一个节点。如果下一个节点存在且节点中的值和p节点相同,则删除该节点,否则将q指针指向下一个节点。
为了防止内存泄漏,我们需要在删除节点时释放它的内存。最后将p指针指向下一个节点,继续处理下一个节点,重复以上步骤。遍历完整个链表之后,字符个数等于链表中剩余节点的数量。
完整代码如下:
```c++
void DeleteDup(ListNode *L) {
ListNode *p = L->next;
while (p != nullptr) {
ListNode *q = p->next;
while (q != nullptr && q->data == p->data) {
p->next = q->next;
delete q;
q = p->next;
}
p = p->next;
}
}
int CountChars(ListNode *L) {
int count = 0;
ListNode *p = L->next;
while (p != nullptr) {
count++;
p = p->next;
}
return count;
}
```
阅读全文