帮我用C语言写代码,判断给定的单链表L是否为有序(非递增或非递减),将对应的函数命名为ListOrder_L()。
时间: 2024-10-21 20:08:09 浏览: 19
在C语言中,你可以编写一个函数`ListOrder_L()`来检查一个单链表是否有序(即非递增或非递减)。这里我们假设链表节点包含一个整数元素`data`和一个指向下一个节点的指针`next`。下面是一个简单的函数实现示例:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} ListNode;
// 判断链表是否有序的函数
bool ListOrder_L(ListNode* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个元素,直接认为它是有序的
return true;
}
// 使用两个指针,一个遍历整个链表,另一个作为基准值
ListNode* slow = head;
ListNode* fast = head->next;
while (fast != NULL && fast->next != NULL) { // 当快指针未到达链表末尾时
// 如果快指针的当前元素小于基准,说明链表不是非递减的
if (fast->data < slow->data) {
return false;
}
// 快慢指针同时移动一步
slow = slow->next;
fast = fast->next->next;
}
// 如果没有提前返回false,那么链表是有序的
return true;
}
// 示例链表创建函数
ListNode* create_linked_list(int arr[], int n) {
ListNode* head = NULL;
ListNode* temp = NULL;
for (int i = 0; i < n; i++) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = arr[i];
newNode->next = NULL;
if (i == 0) {
head = newNode;
} else {
temp->next = newNode;
}
temp = newNode;
}
return head;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
ListNode* L = create_linked_list(arr, n);
bool isOrdered = ListOrder_L(L);
if (isOrdered) {
printf("链表L是有序的。\n");
} else {
printf("链表L是非有序的。\n");
}
return 0;
}
```
这个程序首先创建了一个链表,然后调用`ListOrder_L()`函数检查其顺序,并在主函数中打印结果。
阅读全文