判断单链表是否递增有序,用c语言用循环
时间: 2024-10-11 07:15:42 浏览: 18
判断单链表是否递增有序,可以通过遍历链表,并比较当前节点的值与前一个节点的值来实现。以下是使用C语言循环的方式:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义链表节点结构体
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
bool isMonotonicIncreasing(ListNode* head) {
// 如果链表为空或只有一个元素,则默认为递增有序
if (head == NULL || head->next == NULL) {
return true;
}
ListNode *prev = head; // 前一个节点指针
ListNode *curr = head->next; // 当前节点指针
// 循环遍历链表
while (curr != NULL) {
if (curr->val > prev->val) { // 如果当前值大于前一个值
// 检查接下来的节点是否递减,如果递减则返回false
if (curr->next != NULL && curr->next->val < curr->val) {
return false;
}
} else if (curr->val < prev->val) { // 如果当前值小于前一个值
// 如果已经进入递减阶段,就不再检查后面的节点了,直接返回false
return false;
}
prev = curr; // 更新前一个节点指针
curr = curr->next; // 移动到下一个节点
}
// 所有节点都满足递增条件,返回true
return true;
}
// 测试函数
int main() {
// 创建示例链表
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->val = 1;
head->next = (ListNode*)malloc(sizeof(ListNode));
head->next->val = 2;
head->next->next = (ListNode*)malloc(sizeof(ListNode));
head->next->next->val = 4;
printf("Is the list monotonic increasing? %s\n", isMonotonicIncreasing(head) ? "Yes" : "No");
free(head);
return 0;
}
阅读全文