C语言设计一个算法,判断一个单链表中各个结点值是否有序
时间: 2024-10-13 14:17:54 浏览: 40
要判断一个单链表中的节点值是否有序,你可以使用一种称为“顺序遍历”的方法。以下是判断升序或降序的一个简单算法步骤:
**算法步骤:**
1. 初始化两个指针 `current` 和 `previous`,分别指向链表的第一个元素和它的前一个元素(对于第一个节点,`previous` 指向 `NULL`)。
2. 遍历链表,直到 `current` 指针变为 `NULL`:
- 比较当前节点的值和前一个节点的值(如果存在):
- 如果是升序链表,当前值大于等于前一个值,则继续遍历;
- 如果是降序链表,当前值小于等于前一个值,则链表无序,返回 `false`;
- 更新 `previous` 为当前节点,然后将 `current` 移动到下一个节点。
3. 遍历结束后,如果没有提前返回,说明链表是有序的(无论是升序还是降序),返回 `true`。
```c
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
bool isSortedList(Node* head) {
if (head == NULL || head->next == NULL) {
// 如果链表为空或只有一个节点,视为有序
return true;
}
Node* current = head;
Node* previous = NULL;
bool ascending = true; // 默认升序
while (current != NULL) {
if (ascending && current->data < previous->data) {
return false; // 升序情况下发现违反,链表无序
} else if (!ascending && current->data > previous->data) {
return false; // 降序情况下发现违反,链表无序
}
previous = current;
current = current->next;
}
return true; // 链表已完整遍历,有序
}
```
阅读全文