C言語でリンクリストの情報を修正の方法
リンクリスト中の特定ノードの情報を修正するには、以下の手順に従ってください。
- リスト内をたどり、修正したいノードを見つける。
- ノードの情報を変更する
具体的なコードの例を以下に示します。
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建链表
Node* createLinkedList(int arr[], int n) {
Node* head = NULL; // 头节点指针
Node* tail = NULL; // 尾节点指针
for (int i = 0; i < n; i++) {
// 创建新节点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->next = NULL;
if (head == NULL) {
// 第一个节点
head = newNode;
tail = newNode;
} else {
// 链接到尾节点后面
tail->next = newNode;
tail = newNode;
}
}
return head;
}
// 修改链表节点的信息
void modifyNode(Node* head, int pos, int newData) {
Node* p = head;
int count = 1;
// 遍历链表,找到要修改的节点
while (p != NULL && count < pos) {
p = p->next;
count++;
}
if (p == NULL || count > pos) {
// 找不到要修改的节点
printf("Invalid position!\n");
return;
}
// 修改节点的信息
p->data = newData;
}
// 打印链表
void printLinkedList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 释放链表的内存
void freeLinkedList(Node* head) {
Node* p = head;
while (p != NULL) {
Node* temp = p; // 保存当前节点的指针
p = p->next; // 移动到下一个节点
free(temp); // 释放当前节点的内存
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
Node* head = createLinkedList(arr, n);
printf("Original linked list: ");
printLinkedList(head);
modifyNode(head, 3, 10);
printf("Modified linked list: ");
printLinkedList(head);
freeLinkedList(head);
return 0;
}
このレポートは、このプロジェクトの進行状況の最新情報です。
Original linked list: 1 2 3 4 5
Modified linked list: 1 2 10 4 5
上部のコードでは、`modifyNode()`関数は指定された位置のノードのデータを変更するために使用されます。最初に、変更するノードを探すため、リストを反復処理し、次にデータを変更します。変更するノードが見つからない場合は、エラーメッセージが出力されます。変更が終わると、リストは再び出力されます。最後に `main()` 関数で関係する関数がテスト呼び出しされ、リストのメモリが解放されます。