判断单链表是否递增有序,用c语言简单易懂的方法
时间: 2024-10-11 18:15:13 浏览: 40
c语言数据结构实验:掌握线性表的链式存储结构 熟练掌握循环链表的存储特征和建立方法,掌握线性表的链式存储结构 下面是源码的txt
判断单链表是否递增有序可以采用迭代或递归的方式。这里提供一种简单的迭代方法:
```c
#include <stdbool.h>
#include <stdio.h>
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
bool isMonotonic(ListNode* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个元素
return true;
}
// 初始化两个指针,一个正常移动,一个检查前一个节点是否大于等于当前节点
ListNode* slow = head;
ListNode* fast = head->next;
while (fast && fast->next) {
if (slow->val > fast->val) { // 如果有降序情况,直接返回false
return false;
} else if (slow->val < fast->val) { // 如果有升序情况,调整快指针到下一组对比
slow = fast;
fast = fast->next->next;
} else {
// 同步慢指针和快指针
slow = slow->next;
fast = fast->next->next;
}
}
return true; // 如果遍历完整个链表都没有发现逆序,说明它是递增有序的
}
int main() {
// 创建示例链表并测试函数
ListNode* list = createLinkedList(); // 假设createLinkedList()函数已创建了一个链表
bool result = isMonotonic(list);
printf("Is the linked list monotonic? %s\n", result ? "Yes" : "No");
return 0;
}
```
阅读全文