试采用单链表结构,编写一个回文判断函数,判断输入字符串是否是回文, 要求用主程序进行测试和输出,可以辨别英文字母,数字和汉字。 要求有链结点定义,算法函数,算法测试主程序等完整代码,并指出算法复杂度
时间: 2024-11-03 20:13:34 浏览: 23
为了实现这个功能,我们需要创建一个单链表结构,用于存储字符串的所有字符,并定义一个判断回文的算法。这里是一个简单的Python示例:
首先,我们定义链表节点:
```python
class ListNode:
def __init__(self, value):
self.value = value
self.next = None
```
接下来,我们构建链表并插入字符:
```python
def create_linked_list(s):
head = ListNode(None)
current = head
for char in s:
if isinstance(char, str): # 检查字符类型,包括英文、数字和汉字
current.next = ListNode(char)
current = current.next
return head.next
# 判断链表是否回文
def is_palindrome(head):
slow = head
fast = head.next if head else None
while fast and fast.next:
if slow.value != fast.value:
return False
slow = slow.next
fast = fast.next.next
return True
```
现在我们编写主程序进行测试:
```python
def main():
test_string_1 = "A man, a plan, a canal: Panama"
test_string_2 = "race a car"
linked_list_1 = create_linked_list(test_string_1)
linked_list_2 = create_linked_list(test_string_2)
print(f"Is {test_string_1} a palindrome? {is_palindrome(linked_list_1)}")
print(f"Is {test_string_2} a palindrome? {is_palindrome(linked_list_2)}")
if __name__ == "__main__":
main()
```
算法复杂度分析:
- 创建链表的时间复杂度是O(n),因为需要遍历整个输入字符串。
- 判断回文的过程涉及两个指针,一次遍历,时间复杂度也是O(n)。其中n是字符串长度。
总的来说,总的时间复杂度是O(n)。空间复杂度主要是由链表本身占用的空间,也与输入字符串长度成正比,即O(n)。
阅读全文