用c语言算法判断单链表是否递增有序
时间: 2024-10-11 13:09:07 浏览: 33
数据结构与算法教学大纲程序代码
5星 · 资源好评率100%
在C语言中,判断一个单链表是否递增有序可以使用迭代或递归的方式。这里提供一种简单的迭代方法:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
// 判断链表递增有序的函数
bool isMonotonic(ListNode* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个元素,直接返回真
return true;
}
ListNode *prev = head;
ListNode *current = head->next; // 当前节点
// 比较当前节点与前一个节点的关系,如果递增则继续,递减则返回false
while (current != NULL) {
if (current->val < prev->val) { // 如果当前值小于前一个值,不是递增序列,返回false
return false;
}
if (current->val > prev->val && current->val < prev->next->val) { // 如果中间有降序,也返回false
return false;
}
prev = current;
current = current->next;
}
return true; // 遍历结束,说明链表递增有序
}
// 测试样例
int main() {
ListNode *head = createLinkedList({1, 2, 3, 4}); // 创建一个示例递增链表
bool result = isMonotonic(head);
printf("%s\n", result ? "递增有序" : "非递增有序"); // 打印结果
return 0;
}
// 创建链表的辅助函数
ListNode* createLinkedList(int arr[], int n) {
ListNode *head = NULL, *tail = NULL;
for (int i = 0; i < n; ++i) {
ListNode *node = malloc(sizeof(ListNode));
node->val = arr[i];
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
阅读全文