c语言写一个程序判断单链表是否递增有序
时间: 2024-10-19 21:17:43 浏览: 34
C语言 基于单链表的班级通讯录.rar
5星 · 资源好评率100%
在C语言中,你可以编写一个函数来判断一个单链表是否递增有序。递增有序意味着链表中的每个节点值都大于前一个节点值。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 判断链表是否递增有序
int isMonotonic(ListNode* head) {
if (head == NULL || head->next == NULL) {
return 1; // 空链表或者只有一个元素,视为递增有序
}
// 初始化两个指针,一个遍历正常,一个检查是否有降序情况
ListNode* slow = head;
ListNode* fast = head->next;
while (fast != NULL && fast->next != NULL) {
if (fast->val > slow->val) { // 如果有降序情况,返回0
return 0;
} else if (fast->val < slow->val) { // 否则比较下一个节点,继续检查
fast = fast->next->next;
} else { // 都相等,则移动慢指针继续
slow = slow->next;
fast = fast->next->next;
}
}
return 1; // 如果遍历结束还没发现降序,说明是递增有序
}
// 创建链表节点并插入数据
ListNode* insertNode(ListNode* head, int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = head;
return newNode;
}
int main() {
// 创建示例链表
ListNode* list = insertNode(NULL, 1);
list = insertNode(list, 3);
list = insertNode(list, 5);
list = insertNode(list, 4); // 这里不是递增有序
if (isMonotonic(list)) {
printf("链表递增有序。\n");
} else {
printf("链表不是递增有序。\n");
}
return 0;
}
```
在这个例子中,`isMonotonic`函数会遍历链表并检查是否存在降序的情况。如果找到降序,返回0;否则遍历结束后返回1,表示递增有序。
阅读全文