设计一个算法判定单链表L中的所有结点值是否是递增的
时间: 2023-05-24 20:01:09 浏览: 250
输出以L为首节点指针的单链表中最大节点值-数据结构 第五章 递归
可以通过遍历单链表,依次比较每个节点的值与其前驱节点的值,若出现节点值反而降低的情况,则说明单链表不是递增的。如果遍历到链表末尾仍未出现降低情况,则说明单链表是递增的。
以下是C语言的示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
typedef struct Node {
int value;
struct Node* next;
} ListNode;
bool isIncreasing(ListNode* head) {
if (head == NULL) return false;
ListNode* prev = head;
ListNode* curr = head->next;
while (curr != NULL) {
if (curr->value < prev->value) {
return false;
}
prev = curr;
curr = curr->next;
}
return true;
}
int main() {
ListNode* head = NULL;
ListNode* tail = NULL;
for (int i = 1; i <= 5; i++) {
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
new_node->value = i;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
}
printf("%s\n", isIncreasing(head) ? "Increasing" : "Not Increasing");
tail->value = 3;
printf("%s\n", isIncreasing(head) ? "Increasing" : "Not Increasing");
return 0;
}
```
该算法的时间复杂度为O(n),其中n是单链表的长度。
阅读全文