已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字 符、数字字符和其他字符),试编写算法将该线性链表分割为三个循环链表,其中每个循环 链表表示的线性表中均只含一类字符。
时间: 2023-05-30 22:05:34 浏览: 133
算法思路:
1. 定义三个指针分别指向三个循环链表的表头,初始时均为空。
2. 遍历线性链表,对于每个节点进行判断,若是字母字符则插入到字母循环链表中,若是数字字符则插入到数字循环链表中,若是其他字符则插入到其他循环链表中。
3. 将三个循环链表的表尾指针指向表头,使其形成循环链表。
算法实现:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
def split_list(head):
# 定义三个循环链表的表头和表尾指针
letter_head = letter_tail = Node()
digit_head = digit_tail = Node()
other_head = other_tail = Node()
p = head
while p:
# 判断节点的数据类型并插入到对应的循环链表中
if p.data.isalpha():
letter_tail.next = p
letter_tail = p
elif p.data.isdigit():
digit_tail.next = p
digit_tail = p
else:
other_tail.next = p
other_tail = p
p = p.next
# 将三个循环链表的表尾指针指向表头,形成循环链表
letter_tail.next = letter_head.next
digit_tail.next = digit_head.next
other_tail.next = other_head.next
# 返回三个循环链表的表头指针
return letter_head.next, digit_head.next, other_head.next
```
算法分析:
时间复杂度为 O(n),其中 n 为线性链表的长度。空间复杂度为 O(1),只需要定义常数个额外的指针变量。
阅读全文