#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体
typedef struct Node {
char str[100];
struct Node* next;
} Node;
// 插入函数
void insert(Node** head, Node* newNode) {
if (*head == NULL || strcmp(newNode->str, (*head)->str) < 0) {
newNode->next = *head;
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && strcmp(newNode->str, current->next->str) > 0) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 遍历函数
void traverse(Node* head) {
Node* current = head;
while (current != NULL) {
printf("%s\n", current->str);
current = current->next;
}
}
int main() {
Node arr[3] = {{"banana"}, {"apple"}, {"cherry"}};
Node* head = NULL;
for (int i = 0; i < 3; i++) {
insert(&head, &arr[i]);
}
traverse(head);
return 0;
}
- 结构体定义:定义了一个
Node
结构体,包含一个字符数组str
和一个指向下一个Node
的指针next
。
- 插入函数:
insert
函数接收链表头指针的指针(因为要修改头指针)和要插入的新节点指针。根据字符数组的字典序将新节点插入到合适位置。
- 遍历函数:
traverse
函数遍历链表并打印每个节点的字符数组内容。
- 主函数:定义了一个结构体数组
arr
,并将数组元素按字典序插入到链表中,最后遍历链表并打印内容。