不带头结点的单链表:
1.不带头结点的单链表操作中,除了初始化,头插,尾插,删除,操作与带头结点的单链表有差别外,其它的操作基本上一样。
2.链表指针直接指向了首元节点,因此在首元节点前插入数据元素或者删除首元节点元素都会改变头指针的值。所以这里要引入二级指针。
# include<stdio.h>
# include<stdlib.h>
#include<assert.h>
typedef int ELEM_TYPE;
typedef struct Node
{
ELEM_TYPE mdata;
struct Node* pnext;
}Node, *PNode;
void Init(PNode* phead)
{
if(phead == NULL)
{
return ;
}
*phead = NULL;
}
PNode BuyNode(ELEM_TYPE val)
{
PNode pnewnode = (PNode)malloc(sizeof(Node));
if(pnewnode==NULL)exit(0);
pnewnode->mdata = val;
pnewnode->pnext = NULL;
return pnewnode;
}
bool InsertTail( PNode *phead,ELEM_TYPE val)
{
if(phead==NULL)
{
return false;
}
if( *phead == NULL)
{
PNode pnewnode = BuyNode(val);
*phead = pnewnode;
return true;
}
PNode pCur = *phead;
while(pCur->pnext != NULL)
{
pCur = pCur->pnext;
}
PNode pnewnode = BuyNode(val);