ここ数日、私は自分の c\c++ スキルに取り組んでいます。私は自分のデータ構造の本を読んでいて、二重連結リスト プログラムを実装しない理由を考えました。プログラムを書きました。意外にもうまくいきますが、正しく書いたかどうかはわかりません。割り当てたメモリを解放する方法がわかりません。この人たちで私を助けてください。
また、この「while(linkNode!=0)」について説明していただける方がいらっしゃいましたら、よろしくお願いいたします。
#include<stdio.h>
#include<malloc.h>
struct node
{
int x;
struct node * next;
struct node * prev;
};
struct head
{
unsigned int count;
struct node * hd;
struct node * tl;
};
void main()
{
int i =0;
struct node * linkNode;
struct head *hdd;
hdd = (head *)malloc(sizeof(head));
linkNode = (node *) malloc(sizeof(node));
hdd->count = 1;
hdd->hd = linkNode;
linkNode->prev = 0;
linkNode->next = 0;
linkNode->x = 0;
for(;i<10;i++)
{
linkNode->next = (node *) malloc(sizeof(node));
linkNode->next->prev = linkNode;
linkNode = linkNode->next;
linkNode->next = 0;
linkNode->x = i;
hdd->count+=1;
hdd->tl = linkNode;
}
linkNode = hdd->hd;
printf("priniting in next direction\n");
while(linkNode!=0)
{
printf("%d\n",linkNode->x);
linkNode = linkNode->next;
}
linkNode = hdd->tl;
printf("priniting in prev direction\n");
while(linkNode!=0)
{
printf("%d\n",linkNode->x);
linkNode = linkNode->prev;
}
linkNode = hdd->hd;
while(linkNode!=0)
{
free(linkNode->prev);
linkNode = linkNode->next;
}
free(hdd);
}