天天看点

c语言循环链表中设立尾链表,C语言实现双向非循环链表(带头结点尾结点)的节点插入...

对于双向链表,个人推荐使用带头结点尾结点的方式来处理会比较方便。我在《C语言实现双向非循环链表(不带头结点)的节点插入》中详细实现了在不带头结点的情况下的插入。这次我们将会来在使用头结点尾结点的情况下在任意的位置插入元素。代码上传至 https://github.com/chenyufeng1991/InsertNodeDoubleLinkedList_HeadNode 。

核心代码如下:

//插入一个节点

//插入位置分别为0,1,2,.....

int InsertNodeList(Node *pHead,Node *pTail,int pos,int x){

int i = 0;

Node *pMove;

Node *pInsert;

pInsert = (Node *)malloc(sizeof(Node));

memset(pInsert, 0, sizeof(Node));

pInsert->prior = NULL;

pInsert->next = NULL;

pInsert->element = x;

pMove = pHead;

while (pMove != pTail) {

if (i == pos) {

//注意这里的链接顺序

pMove->next->prior = pInsert;

pInsert->next = pMove->next;

pMove->next = pInsert;

pInsert->prior = pMove;

printf("%s函数执行,在pos=%d位置插入x=%d节点成功\n",__FUNCTION__,pos,x);

return 1;

}

i++;

pMove = pMove->next;

}

printf("%s函数执行,插入元素失败\n",__FUNCTION__);

return 0;

}