#include
#include
#define ElemType int
typedef struct{
ElemType e;
struct Node *next;
} Node,*pNode;//pNode是二级指针
int getElemNum(Node *head);
Node* getLastElem(Node *head);
void appendElem(pNode *head,ElemType e);
void showLink(Node *head);
int main(int argc, char *argv[])
{
Node *head=NULL,*p;
showLink(head);
appendElem(&head,10);
appendElem(&head,99);
appendElem(&head,22);
appendElem(&head,100);
showLink(head);
return 0;
}
//得到链表节点个数
int getElemNum(Node *head){
if(!head) return 0;
Node *p=head;
int i=0;
while(p){
p=p->next;
i++;
}
return i;
}
//得到链表尾节点
Node* getLastElem(Node *head){
if(!head) return NULL;
Node *p=head;
while(p->next) p=p->next;
return p;
}
//在链表尾部加入新节点
void appendElem(pNode *head,ElemType e){
Node *node,*p;
node=(Node*)malloc(sizeof(Node));//构造新节点
node->e=e;
node->next=NULL;
//头指针为空,使用二级指针改变头指针指向新的节点
if(!(*head)){
pNode *temp=head;
*temp = node;
return;
}
//如果头指针不为空,将尾指针的next指向新的node
p=getLastElem(*head);
p->next=node;
return;
}
void showLink(Node *head){
Node *p;
p=head;
if(!p){
printf("empty link\n");
return;
}
printf("this link has %d elems\n",getElemNum(head));
while(p){
printf("%d ",p->e);
p=p->next;
}
printf("\n");
}