链表(Linked List)是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含数据部分和一个指向下一个节点的指针。链表的主要类型包括单链表、双链表和循环链表。
当你从函数写入链表时,链表状态不变,可能是由于以下原因:
以下是一个示例代码,展示如何在函数中正确修改链表:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct Node {
int data;
struct Node* next;
};
// 创建新节点
struct Node* createNode(int data) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 在链表末尾添加节点
void appendNode(struct Node** head, int data) {
struct Node* newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
struct Node* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 打印链表
void printList(struct Node* head) {
struct Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
// 修改链表的函数
void modifyList(struct Node** head, int index, int newData) {
struct Node* temp = *head;
int count = 0;
while (temp != NULL && count < index) {
temp = temp->next;
count++;
}
if (temp != NULL) {
temp->data = newData;
}
}
int main() {
struct Node* head = NULL;
appendNode(&head, 1);
appendNode(&head, 2);
appendNode(&head, 3);
printf("Original List: ");
printList(head);
modifyList(&head, 1, 10);
printf("Modified List: ");
printList(head);
return 0;
}
通过上述代码和解释,你应该能够理解为什么在函数中修改链表时链表状态不变,并且知道如何正确修改链表。
领取专属 10元无门槛券
手把手带您无忧上云