过去几天我正在研究我的 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);
}