一种全新的链表模式

一般使用如下所示的方式定义节点
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++;

首先节点的前项指针指向链表的尾节点;
节点的下一个节点,指向链表的第一个节点;
链表的第一个节点的前一个节点,表示插入的节点;
链表的第一个节点表示当前节点。

猜你喜欢

转载自blog.csdn.net/qq224feng/article/details/83412072