如何初始化一个含有两种不同字符串类型数据的单链表
时间: 2024-11-09 19:26:12 浏览: 5
在C语言中,初始化一个包含两种不同字符串类型的单链表(如char*和const char*)通常涉及到创建节点结构体、定义节点类型以及初始化链表。这里我们假设有一个简单的链表节点结构体,名为`ListNode`,它可能长这样:
```c
typedef struct ListNode {
char* string1; // 第一种字符串类型
const char* string2; // 第二种字符串类型
struct ListNode* next; // 指针到下一个节点
} ListNode;
```
初始化这样一个链表,你需要手动创建节点并设置它们的内容。以下是一个简单的例子,展示了如何创建两个节点并将它们连接起来:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 初始化一个链表节点
ListNode* create_node(char* str1, const char* str2) {
ListNode* node = (ListNode*)malloc(sizeof(ListNode));
if (node != NULL) {
node->string1 = strdup(str1); // 使用strdup复制字符串1,因为next指针可能会修改原值
node->string2 = strdup(str2);
node->next = NULL;
}
return node;
}
// 创建并初始化链表
ListNode* initialize_linked_list() {
ListNode* head = NULL;
head = create_node("String1", "ConstString1"); // 创建第一个节点
if (head != NULL) {
ListNode* second = create_node("String2", "ConstString2"); // 创建第二个节点
if (second != NULL) {
head->next = second; // 连接节点
}
}
return head;
}
int main() {
ListNode* list = initialize_linked_list();
if (list != NULL) {
printf("First node: %s -> %s\n", list->string1, list->string2);
ListNode* current = list->next;
while (current != NULL) {
printf("%s -> ", current->string1);
current = current->next;
}
printf("NULL\n");
} else {
printf("Failed to create the linked list.\n");
}
// 清理内存
for (ListNode* node = list; node != NULL; node = node->next) {
free(node->string1);
free(node->string2);
free(node);
}
return 0;
}
```
在这个例子中,我们首先创建了一个包含两个节点的链表,然后在`main()`函数里打印节点的内容。别忘了在结束时释放所有动态分配的内存,避免内存泄漏。
阅读全文