假设有一个带头结点的单链表L,每个结点值由单个数字、小写字母和大写字母构成。设计一个算法将其拆分成3个带头结点的单链表L1、L2和L3,L1包含L中的所有数字结点,L2包含L中的所有小写字母结点,L3包含L中的所有大写字母结点。
时间: 2023-04-12 10:01:17 浏览: 115
带头结点的单链表
4星 · 用户满意度95%
可以使用三个指针分别指向L1、L2、L3的头结点,然后遍历L,将符合条件的结点插入到对应的链表中即可。具体实现可以参考以下代码:
ListNode* L1 = new ListNode(0);
ListNode* L2 = new ListNode(0);
ListNode* L3 = new ListNode(0);
ListNode* p1 = L1, *p2 = L2, *p3 = L3;
ListNode* p = L->next;
while (p != NULL) {
if (isdigit(p->val)) {
p1->next = p;
p1 = p1->next;
} else if (islower(p->val)) {
p2->next = p;
p2 = p2->next;
} else if (isupper(p->val)) {
p3->next = p;
p3 = p3->next;
}
p = p->next;
}
p1->next = NULL;
p2->next = NULL;
p3->next = NULL;
// L1、L2、L3分别为拆分后的三个链表
ListNode* L1 = L1->next;
ListNode* L2 = L2->next;
ListNode* L3 = L3->next;
阅读全文