给我使用c语言初始化一个升序链表
时间: 2024-10-08 14:24:53 浏览: 32
c语言-c语言编程基础之leetcode题解第23题合并K个升序链表.zip
在C语言中,我们可以使用结构体来表示链表节点,并通过指针来连接它们。首先,我们需要定义一个链表节点结构体(这里假设每个节点有一个整数值`data`和指向下一个节点的指针`next`)。下面是一个创建升序链表的基本示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表函数
Node* initializeAscendingList(int arr[], int size) {
Node* head = NULL; // 链表头指针
Node* current = NULL; // 当前节点指针
for (int i = 0; i < size; i++) {
if (!head || arr[i] > head->data) { // 如果链表为空或新值大于当前最大值
// 创建一个新的节点并更新链表头
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = head;
head = newNode;
} else { // 否则,将新值插入到适当位置
current = head;
while (current->next && current->next->data < arr[i]) {
current = current->next;
}
current->next = (Node*)malloc(sizeof(Node)); // 插入新节点
current->next->data = arr[i];
current->next->next = NULL; // 更新节点的指针
}
}
return head;
}
// 测试函数
void printList(Node* head) {
Node* temp = head;
while (temp) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
int arr[] = {5, 3, 7, 1, 9};
int size = sizeof(arr) / sizeof(arr[0]);
Node* listHead = initializeAscendingList(arr, size);
if (listHead) {
printList(listHead); // 打印链表
} else {
printf("Failed to create the list.\n");
}
return 0;
}
```
在这个例子中,`initializeAscendingList`函数接受一个整数数组和其大小,然后遍历数组,根据元素值构建一个按升序排列的链表。`printList`函数用于打印链表的内容。
阅读全文