C语言设计一个完整程序,设计一个算法,判断一个单链表中各个结点值是否有序
时间: 2024-10-13 20:18:16 浏览: 29
如何将两个有序链表并为一个有序链表
在C语言中,我们可以创建一个函数来判断单链表是否有序,比如递增或递减。这里是一个简单的示例,我们将定义一个`ListNode`结构体表示链表节点,以及`isListSorted`函数来进行检查:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int val;
struct ListNode* next;
} ListNode;
// 判断链表是否有序
int isListSorted(ListNode* head) {
if (head == NULL || head->next == NULL) { // 空链表或只有一个元素,直接返回1(有序)
return 1;
}
// 检查头节点的值是否小于下一个节点的值
if (head->val > head->next->val) {
return 0; // 如果头节点比下一个大,不是递增顺序,返回0
}
// 递归遍历剩余部分,如果发现有逆序情况则返回0,否则继续检查
return isListSorted(head->next);
}
// 创建并初始化链表节点
void createLinkedList(ListNode** head, int values[], int size) {
*head = malloc(sizeof(ListNode));
(*head)->val = values[0];
(*head)->next = NULL;
for (int i = 1; i < size; i++) {
ListNode* newNode = malloc(sizeof(ListNode));
newNode->val = values[i];
newNode->next = *head;
*head = newNode;
}
}
int main() {
int values[] = {1, 2, 4, 5, 6}; // 示例数据
int size = sizeof(values) / sizeof(values[0]);
ListNode* head = NULL;
createLinkedList(&head, values, size);
int sorted = isListSorted(head);
if (sorted) {
printf("链表有序。\n");
} else {
printf("链表无序。\n");
}
// 清理内存
while (head != NULL) {
ListNode* temp = head;
head = head->next;
free(temp);
}
return 0;
}
```
在这个程序中,我们首先创建了一个链表,然后调用`isListSorted`函数来判断这个链表是否是有序的。如果链表递增排序,该函数会返回1,反之返回0。
阅读全文