SIEMENS山东省德州市 西门子代理商——西门子华北一级总代理
环形链表初始化
环形链表的初始化过程如下:
//先为环形链表分配一个节点的内存 *pList=(stData*)malloc(sizeof(stData)); (*pList)->data=0; (*pList)->pNext=NULL;
//再为剩余的链表元素分配内存 pTmp1 = *pList; //临时指针1指向环形链表的头 for(i=0;i<len-1;i++){ //临时指针2用于逐个申请内存 pTmp2=(stData*)malloc(sizeof(stData)); pTmp2->data=0; pTmp2->pNext=NULL;
//临时指针1的next指向刚分配内存的临时指针2 pTmp1->pNext=pTmp2; //然后临时指针1再指向临时指针2 pTmp1=pTmp2; //printf("init_list i---%d\r\n",i);}
//整个链表长度都分配好内存后,临时指针1再指向链表头,这样就构成了一个环形链表 pTmp1->pNext = *pList;}
基本思路是:
首先分配第一个节点,这也是整个环形链表的地址,即pList的指向
然后使用两个临时指针,pTmp1用于连接各个节点(指定各节点的pNext指针指向下一个),pTmp2用于不断分配下一个节点的内存
分配第1个节点pTmp1 = *pList; //临时指针1指向环形链表的头
第一个节点的内存先通过pList指针分配,然后临时指针pTmp1也先指向这个节点:
分配第2个节点//临时指针1的next指向刚分配内存的临时指针2 pTmp1->pNext=pTmp2; //然后临时指针1再指向临时指针2 pTmp1=pTmp2;}
pTmp2先分配一个节点内存
pTmp1使第1节点的pNext指向第2个节点
pTmp1再指向第2个节点,为下一次作准备
分配第3个节点与分配第2个节点类似,后面的节点分配都是同样的循环操作:
分配最后1个节点例子中环形链表的长度为5,因此分配第5个之后,会退出循环,然后:
将pTmp1的pNext指向pList,这样就构成了一个环形链表
链表初始化函数退出后,两个临时指针也会被自动释放
初始化完成后的效果如下,一个5个节点,构成了一个环形,且初始状态,头节点与尾节点均指向pList指向的节点:
展开全文
相关产品