//链表节点定义
struct LinkNode {int val;
struct LinkNode *next;
};
//创建长度为listLen的链表,每个节点的值为0~listLen-1
LinkNode * createLink(int listLen){
struct LinkNode *phead,*ptail;phead=ptail=(struct LinkNode *)malloc(sizeof(LinkNode));
phead->next=NULL;
for(int i=0;i<listLen;i++){
struct LinkNode *nn = (struct LinkNode *)malloc(sizeof(LinkNode));
nn->val = i;
nn->next = NULL;
ptail->next=nn;
ptail=nn;
}
return phead->next;
}
//链表中值为val的节点后插入一个新的节点
LinkNode * insertNode(LinkNode *ph, int val){if(ph==NULL || ph->next==NULL)
return NULL;
LinkNode *ln=ph->next;
while(ln!=NULL && ln->val!=val){
ln = ln->next;
}
if(ln!=NULL){
LinkNode *nn = (LinkNode *)malloc(sizeof(LinkNode));
nn->val=val;
nn->next=ln->next;
ln->next=nn;
}
return ph;
}
//删除链表中值为val的节点
//delete a nodeLinkNode * delNode(LinkNode *ph, int val){
if(ph==NULL || ph->next==NULL)
return NULL;
LinkNode *ln=ph->next;
LinkNode *lp=ph;
while(ln!=NULL && ln->val!=val){
lp = ln;
ln = ln->next;
}
if(ln!=NULL){
LinkNode *tp = lp->next;
lp->next=lp->next->next;
free(tp);
}
return ph;
}
//正序打印链表
void printLinkList(LinkNode *ph){while(ph!=NULL){
printf(" %d addr=%p\n ", ph->val, ph->next);
ph=ph->next;
}
}
//逆序打印链表
void printLinkListReverse(LinkNode *ph){if(ph !=NULL ){
if(ph->next != NULL){
printLinkListReverse(ph->next);
}
printf("%d\n",ph->val);
}
}