设计一个算法,判断一个单链表中各个结点值是否有序
时间: 2024-10-13 13:18:47 浏览: 36
[详细完整版]数据结构习题.txt
5星 · 资源好评率100%
设计一个算法来判断一个单链表中各节点的值是否有序,通常有两种情况需要考虑:升序和降序。这里我们假设是升序排序。
1. **升序判断** (递归法):
- 如果链表为空或只有一个元素,则它是有序的。
- 从第二个节点开始,如果当前节点的值大于前一个节点的值,那么链表不是升序的,返回 false。
- 如果遍历完整个链表都没有发现违反顺序的情况,说明链表是升序的,返回 true。
```python
def is_sorted(head):
if not head or not head.next:
return True
if head.next.value < head.value:
return False
return is_sorted(head.next)
```
2. **非递归法** (迭代法):
- 定义两个指针,一个(slow)每次移动一步,另一个(fast)每次移动两步。
- 当fast指针到达链表末尾时,如果slow指针还在遍历,说明链表已经有序;若fast和slow位置交换了,说明链表未有序。
```python
def is_sorted_iterative(head):
slow = fast = head
while fast and fast.next:
if fast.value > slow.value:
return False
slow = slow.next
fast = fast.next.next
return True
```
阅读全文