参考资料:
[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;
}
}