对于双向链表,个人推荐使用带头结点尾结点的方式来处理会比较方便。我在《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;

}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐