C言語で双方向リストの長さをどのように計算すればよいですか?
双方向リストの長さを計算するには、以下のアルゴリズムを使用できます。
- 変数countを定義し、0で初期化して、カウントに使用します。
- リストの先頭ノードから順番にリストの各ノードを走査します。
- ノードを1つ通過する度に、countは1増えます。
- リストの最後のノードに到達した時、変数countの値はリストの長さとなります。
- リストの長さとしてcountを返す。
以下はサンプルコードです。
#include <stdio.h>
#include <stdlib.h>
// 双向链表的节点结构
typedef struct Node {
int data;
struct Node *prev; // 前驱节点指针
struct Node *next; // 后继节点指针
} Node;
// 计算双向链表的长度
int getLength(Node *head) {
int count = 0;
Node *current = head;
while (current != NULL) {
count++;
current = current->next;
}
return count;
}
int main() {
// 创建双向链表
Node *head = (Node *)malloc(sizeof(Node));
head->data = 1;
head->prev = NULL;
Node *node2 = (Node *)malloc(sizeof(Node));
node2->data = 2;
node2->prev = head;
head->next = node2;
Node *node3 = (Node *)malloc(sizeof(Node));
node3->data = 3;
node3->prev = node2;
node2->next = node3;
node3->next = NULL;
// 计算链表的长度
int length = getLength(head);
printf("Length of the doubly linked list: %d\n", length);
// 释放链表内存
Node *current = head;
while (current != NULL) {
Node *temp = current;
current = current->next;
free(temp);
}
return 0;
}
このコードでは、まず3つのノードを持つ双方向リストを作成しました。次にgetLength()関数を使用してリストの長さを計算し、結果を出力しました。最後にリストのメモリを解放しました。