数据结构专题(二):2.4链表的插入操作,头插法

  1. 头插法一:
    思想如下图:
    数据结构专题(二):2.4链表的插入操作,头插法

数据结构专题(二):2.4链表的插入操作,头插法
如下代码:

///头插法建立单链表
LinkListNode *Create_Front_Lklist(ElemType arr[],int length)
{
    LinkListNode *pHead,*p,*q;
    int i;
    pHead = (LinkListNode *)malloc(sizeof(LinkListNode));
    pHead->pNext = NULL;
    q = pHead->pNext;
    //头插的时候,必须逆序遍历顺序表
    for(i= length - 1;i>=0;i--)
    {
        p = (LinkListNode *)malloc(sizeof(LinkListNode));
        p->data = arr[i];
        p->pNext = q;     //使得新加入的结点传入了上一个结点
        pHead->pNext = p; //头结点指向了当前的新加入结点
        q = pHead->pNext; //让q指向当前的结点
    }

    return pHead;

}

2.头插法二:
思想:如下图
数据结构专题(二):2.4链表的插入操作,头插法
在这里插入图片描述

如下代码:

///头插法二:
LinkListNode *Create_Front2_LkList(ElemType arr[],int length)
{
    LinkListNode *pHead,*p,*q;
    //p是新加入结点,q是当前结点
    int i;
    q = NULL;
    for(i = length-1;i>=0;i--)
    {
        p = (LinkListNode *)malloc(sizeof(LinkListNode));
        p->data = arr[i];
        p->pNext = q;
        q = p;
    }
    pHead = (LinkListNode *)malloc(sizeof(LinkListNode));
    pHead->pNext =  q;
    return pHead;
}

3.头插法三:
思想如下图:
数据结构专题(二):2.4链表的插入操作,头插法
如下代码:

///头插法三:
LinkListNode *Create_Front3_LkList(ElemType arr[],int length)
{
    LinkListNode *pHead,p;
    int i;
    pHead = (LinkListNode *)malloc(sizeof(LinkListNode));
    pHead->pNext = NULL;
    for(i = length-1;i>=0;i--)
    {
        p = (LinkListNode  *)malloc(sizeof(LinkListNode));
        p->data = arr[i];
        p->pNext = pHead = pNext;
        pHead->pNext = p;
    }
    //之所以我们的方法三可以节省方法一中的一个变量q
    //原因是:pHead不发生变化,而pHead中的pNext始终作为当前结点的指针
    return pHead;
}
上一篇:剑指offer第二题 逆转链表


下一篇:内幕消息:嵌入式软件挤出最低功耗模式