设计一个算法,判断一个单链表中各个结点值是否有序。(C语言)
时间: 2024-10-13 08:17:20 浏览: 32
为了设计一个C语言算法来判断一个单链表中的节点值是否有序,我们可以采用两种常见的方法:递归遍历和迭代遍历。这里我会给出一种简单的迭代方法:
```c
#include <stdbool.h>
#include <stdio.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
bool isSorted(Node* head) {
// 如果链表为空或只有一个元素,则认为它是有序的
if (head == NULL || head->next == NULL)
return true;
// 当前节点、下一个节点以及上一个节点
Node* current = head->next;
Node* prev = head;
// 遍历链表,比较当前节点和前一个节点的值
while (current != NULL) {
if (current->data < prev->data) {
// 如果当前值小于前一个值,说明顺序错误
return false;
}
prev = current; // 更新前一个节点
current = current->next;
}
// 如果所有节点都按照升序排列,返回true
return true;
}
int main() {
// 示例链表创建和测试
Node* list = createLinkedList(); // 创建链表函数
bool result = isSorted(list);
if (result)
printf("链表已排序\n");
else
printf("链表未排序\n");
freeList(list); // 清理链表
return 0;
}
```
在这个`isSorted`函数中,我们不断检查链表中的节点,如果发现有节点的值比其前一个节点小,就立即返回`false`,表示链表无序。如果没有找到这样的节点,说明链表是有序的。
阅读全文