用c++写一个假设有一个带有头节点的单链接列表L,每个节点值由单个数字、小写字母和大写字母组成。设计一个算法,将其拆分为三个带有头部节点的单链接列表L1、L2和L3。L1包含L中的所有数字节点,L2包含L中的所有小写字母节点,L3包含L字母节点中的所有大写节点
时间: 2023-04-04 13:03:37 浏览: 108
用C++语言实现的单链表
好的,我可以回答这个问题。以下是算法的实现:
```
// 定义三个带有头节点的单链接列表
struct ListNode {
char val;
ListNode* next;
ListNode(char x) : val(x), next(nullptr) {}
};
ListNode* L1 = new ListNode('0');
ListNode* L2 = new ListNode('a');
ListNode* L3 = new ListNode('A');
// 遍历原链表,将节点插入对应的链表中
ListNode* curr = L->next;
while (curr != nullptr) {
if (isdigit(curr->val)) {
ListNode* node = new ListNode(curr->val);
node->next = L1->next;
L1->next = node;
} else if (islower(curr->val)) {
ListNode* node = new ListNode(curr->val);
node->next = L2->next;
L2->next = node;
} else if (isupper(curr->val)) {
ListNode* node = new ListNode(curr->val);
node->next = L3->next;
L3->next = node;
}
curr = curr->next;
}
// 输出三个链表
cout << "L1: ";
ListNode* p = L1->next;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
cout << "L2: ";
p = L2->next;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
cout << "L3: ";
p = L3->next;
while (p != nullptr) {
cout << p->val << " ";
p = p->next;
}
cout << endl;
```
希望这个算法能够帮到你!
阅读全文