如下代码:
///头插法建立单链表 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.头插法二:
思想:如下图
在这里插入图片描述
如下代码:
///头插法二: 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.头插法三:
思想如下图:
如下代码:
///头插法三: 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; }