C语言实现双向非循环链表(带头结点尾结点)的节点插入

Posted 乞力马扎罗的雪CYF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}


以上是关于C语言实现双向非循环链表(带头结点尾结点)的节点插入的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之带头结点的循环双向链表详细图片+文字讲解

带头节点的双向链表

C语言实现非循环双链表节点的删除(带头结点尾结点)

C实现头插法和尾插法来构建非循环双链表(不带头结点)

[数据结构]——带有头节点的双向循环链表(创建头节点创建新节点头插尾插头删尾删删除pos位的结点在pos位前插入结点查找销毁)

[数据结构]——带有头节点的双向循环链表(创建头节点创建新节点头插尾插头删尾删删除pos位的结点在pos位前插入结点查找销毁)