单向链表、双向链表的插入和删除

参考资料:
[1]大话数据结构 3.8 单链表的插入和删除 自己画的红框
[2]大话数据结构 3.14 双向链表 自己画的红框
[3]大话数据结构 3.9单链表的整表创建,一下子就理解了!!!
单向链表和双向链表的插入,要注意顺序!!!


struct ListNode {
    int m_nKey;
    ListNode * m_pNext;
};

//创建单向链表,使用头插法
//参考资料:大话数据结构,3.9单链表的整表创建,一下子就理解了
void CreateListNode(ListNode* L, int nNum)
{
    ListNode* p;

    //先建立一个带头结点的单链表
    L = (ListNode*)malloc(sizeof(L));
    L->m_pNext = nullptr;

    for (int i = 0; i < nNum; i++)
    {
        p = (ListNode*)malloc(sizeof(p));
        p->m_nKey = 1;
        p->m_pNext = L->m_pNext;
        L->m_pNext = p;
    }

}

//由单向链表头插法类比可得
//双向链表
struct DualListNode 
{
    int m_nKey;
    DualListNode* m_pPrev;
    DualListNode* m_pNext;
};

//双向链表的整表创建。
void CreateDualListNode(DualListNode* L, int nNum)
{
    L = (DualListNode*)malloc(sizeof(L));
    L->m_pPrev = nullptr;
    L->m_pNext = nullptr;

    DualListNode* p;

    for (int i = 0; i < nNum; i++)
    {
        p = (DualListNode*)malloc(sizeof(p));
        p->m_nKey = 1;

        p->m_pNext = L->m_pNext;
        p->m_pPrev = L;
        L->m_pNext->m_pPrev = p;
        L->m_pNext = p;

    }
}

你可能感兴趣的:(单向链表、双向链表的插入和删除)