C语言【问题描述】 查找单循环链表里面的元素 在单循环链表里面取元素 求单循环链表的长度 求单循环链表里面的最大值 判断单循环链表递增有序 【输入形式】 数字 【输出形式】 数字 【样例输入】 12345 3 4 【样例输出】 3 4 5 5 1
时间: 2023-12-04 20:02:30 浏览: 63
以下是C语言实现单循环链表的基本操作的代码:
```c
#include <stdio.h>
#include <stdlib.h>
/* 定义单循环链表节点结构体 */
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
/* 创建单循环链表 */
ListNode* createList(int *nums, int numsSize) {
if (numsSize == 0) {
return NULL;
}
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
head->val = nums[0];
head->next = NULL;
ListNode *tail = head;
for (int i = 1; i < numsSize; i++) {
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = nums[i];
node->next = NULL;
tail->next = node;
tail = node;
}
tail->next = head;
return head;
}
/* 查找单循环链表里面的元素 */
ListNode* findNode(ListNode *head, int val) {
if (head == NULL) {
return NULL;
}
ListNode *cur = head;
do {
if (cur->val == val) {
return cur;
}
cur = cur->next;
} while (cur != head);
return NULL;
}
/* 求单循环链表的长度 */
int getListLength(ListNode *head) {
if (head == NULL) {
return 0;
}
int count = 0;
ListNode *cur = head;
do {
count++;
cur = cur->next;
} while (cur != head);
return count;
}
/* 求单循环链表里面的最大值 */
int getListMax(ListNode *head) {
if (head == NULL) {
return 0;
}
int maxVal = head->val;
ListNode *cur = head->next;
do {
if (cur->val > maxVal) {
maxVal = cur->val;
}
cur = cur->next;
} while (cur != head);
return maxVal;
}
/* 判断单循环链表递增有序 */
int isListSorted(ListNode *head) {
if (head == NULL) {
return 1;
}
int prevVal = head->val;
ListNode *cur = head->next;
do {
if (cur->val < prevVal) {
return 0;
}
prevVal = cur->val;
cur = cur->next;
} while (cur != head);
return 1;
}
int main() {
int nums[] = {1, 2, 3, 4, 5};
int numsSize = sizeof(nums) / sizeof(nums[0]);
ListNode *head = createList(nums, numsSize);
/* 测试查找单循环链表里面的元素 */
ListNode *node3 = findNode(head, 3);
ListNode *node4 = findNode(head, 4);
printf("%d %d %d\n", node3->val, node4->val, node4->next->val);
/* 测试求单循环链表的长度 */
int length = getListLength(head);
printf("%d\n", length);
/* 测试求单循环链表里面的最大值 */
int maxVal = getListMax(head);
printf("%d\n", maxVal);
/* 测试判断单循环链表递增有序 */
int isSorted = isListSorted(head);
printf("%d\n", isSorted);
return 0;
}
```
以上代码实现了创建单循环链表、查找单循环链表里面的元素、求单循环链表的长度、求单循环链表里面的最大值和判断单循环链表递增有序等基本操作。
阅读全文