//链表节点定义
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 node LinkNode * 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); } }