一般使用如下所示的方式定义节点
typedef struct _tNode
{
int NodeData;
struct tNode * node;
} tNode;
在进行节点的初始化的时候,需要将定义头节点,如下所示:
tNode * pHead;
然后开始进行链表的生成,具体的如下所示:
程序执行的主要关系是,先给首节点变量赋值,将节点指针指向null,再创建一个临时节点p,并为p.data赋值,为ptile->pNext赋值p,和前项节点建立连接,然后将p->pNext指向NULL,最后将p赋值给ptile,完成在尾部插入节点,最终返回尾部的节点信息。
具体的程序如下所示:
PNODE pHead=(PNODE)malloc(sizeof(NODE));//分配一个头节点
if(NULL==pHead)
{
exit(-1);
}
else
{ PNODE pTail=pHead;
pHead->data = data[0];
pHead->pNext=NULL;
for(i=1;i<len;i++)
{
PNODE p=(PNODE)malloc(sizeof(NODE));
if(NULL==p)
{
exit(-1);
}
else
{
p->data=data[i];
pTail->pNext=p;
p->pNext=NULL;
pTail=p;
}
}
}
return pHead;
在程序中,我们可以发现需要创建pHead节点,p临时节点,pTail中间节点完成链表的创建。但是在实际使用中,这样会比较麻烦,有没有一种简单的方式创建结点和链表。可以使用如下所示的方式
创建节点,分别为前向节点和后向节点,然后在定义一个列表,列表中包含有节点和数值。
节点的初始化tNodeInit(tNode * node);函数,将前项节点和后向节点分别指向节点自己。如下所示:
列表的初始化函数,将前项节点和后向接地赋值到自己。
1、将节点加入到链表的头部
node->firstNode = list->firstNode->preNode;
node->nextNode = list->firstNode;
list->firstNode->preNode = node;
list->firstNode = node;
list->nodeCount++;
首先节点的前项指针指向链表的尾节点;
节点的下一个节点,指向链表的第一个节点;
链表的第一个节点的前一个节点,表示插入的节点;
链表的第一个节点表示当前节点。