InsertAtHead0:从能立读入正整数,再读入D个升序整数,用头插法 建立带表头结点的降序单循环链表La:例如输入n为4,然后依次输入 2,5,7,8,头插法创建单插环链表的c语言代码
时间: 2024-09-21 17:08:59 浏览: 54
在C语言中,实现从正整数n开始插入D个升序整数到形成降序单循环链表的头插法操作,你可以按照以下步骤编写代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 插入节点到头部并保持降序
void insertAtHead(Node** head, int value) {
Node* newNode = createNode(value);
if (*head == NULL) { // 如果链表为空,直接将新节点设为首节点
*head = newNode;
newNode->next = *head; // 自连接形成循环链表
} else if (value > (*head)->data) { // 否则,如果值大于当前首节点,插入新节点并调整顺序
newNode->next = *head;
*head = newNode;
} else { // 插入到正确位置,遍历找到合适的位置
Node* current = *head;
while (current->next != *head && current->data < value) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
if (current->next == *head) { // 如果新节点放在了头,形成循环
newNode->next = *head;
}
}
}
int main() {
int n, D, num;
scanf("%d", &n); // 读入正整数n
Node* head = NULL; // 初始化链表头指针为NULL
for (int i = 0; i < D; i++) {
scanf("%d", &num); // 读入D个升序整数
insertAtHead(&head, num); // 插入到头部并更新链表
}
// 输出链表示例,这里仅打印前几个节点
printf("降序单循环链表La:\n");
Node* temp = head;
for (int i = 0; i < n; i++, temp = temp->next) {
printf("%d ", temp->data);
}
// 注意:实际运行时需要添加处理循环链表结束的条件
return 0;
}
```
阅读全文