用c语言写出一个正确的代码判断单链表是否递增有序
时间: 2024-10-11 16:10:15 浏览: 35
在C语言中,我们可以创建一个函数来检查一个单链表是否递增有序。递增有序意味着列表中的每个节点值都大于前一个节点的值。下面是一个简单的示例,该函数使用指针遍历链表并比较相邻元素:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 检查链表是否递增有序
int isMonotonicIncreasing(ListNode* head) {
if (head == NULL || head->next == NULL) {
return 1; // 空链表或只有一个节点,视为递增有序
}
ListNode *current = head;
while (current != NULL && current->next != NULL) {
if (current->val >= current->next->val) {
current = current->next; // 如果当前节点大于等于下一个节点,则继续检查下一对
} else {
break; // 发现不递增,返回0
}
}
// 判断链表是否在找到第一个不递增之后仍然保持递增
if (current != NULL && (current->val > current->next->val)) {
return 0; // 链表不是递增有序
} else {
return 1; // 否则,链表是递增有序
}
}
// 创建一个单链表节点
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = value;
newNode->next = NULL;
return newNode;
}
// 示例测试
void testIsMonotonicIncreasing() {
ListNode* list1 = createNode(1);
list1->next = createNode(2);
list1->next->next = createNode(3);
printf("List 1 is %s monotonic increasing.\n", isMonotonicIncreasing(list1) ? ":" : "not ");
ListNode* list2 = createNode(1);
list2->next = createNode(2);
list2->next->next = createNode(1); // 这里不递增
printf("List 2 is %s monotonic increasing.\n", isMonotonicIncreasing(list2) ? ":" : "not ");
}
int main() {
testIsMonotonicIncreasing();
return 0;
}
```
在这个代码中,`isMonotonicIncreasing` 函数会检查链表,并通过循环逐个比较节点。如果找到任何一个节点的值小于等于其后的节点,则认为链表不是递增有序。
阅读全文