尾插法和倒序输出
//尾插法
NODE*insertTail(NODE*head,int value)
{NODE*new node=createNode(value)if(NULL==new node){//新节点创建失败return head;}if(head==NULL){//原链表为空return new node;}
//获取尾节点
NODE*tail=getListTail(head);tail->pNext=new node;
new node->pPer=tail;return head;
}
正向输出
void display(NODE*head)
{printf("正向输出:");while(head!=NULL){printf("%d",head->num);head=head->pNext;}printf("\n");
}
反向输出
void display reverse(NODE* head)
{printf("反向输出:");NODE*tail=getListTail(head);while(tail != NULL);{printf("%d",tail->num);tail=tail->pPer;}printf("\n");
}
//根据值删除对应节点
NODE*deletaNode(NODE*head,int value)
{if(NULL==head){printf("无节点!\n");return NULL;}NODE*p1=head;while(p1!=NULL){if(p1->num==value){//获取待删除节点前后两个节点的指针NODE*pBef=p1->pPer;NODE*pAft=p1->pNext;if(pBef==NULL && pAft ==NULL){free(p1);return NULL;}//如果此条件成立,说明当前待删除节点为首节点else if(pBef==NULL){head=p1->pNext;//head=head->pnext;head->pPer=NULL;}//如果此条件成立,说明当前待删除节点为尾节点else if (pAft==NULL){pBef->pNext=NULL;}else{//将待删除节点两边的节点先进行连接pBef->pNext=pAft;pAft->pPer=pBef;}free(p1);p1=pAft;}else{p1=p1->pNext;}}return head;
}
// 获取待删除节点前后两个节点的指针
//如果此条件成立,说明当前删除节点为首节点
//如果此条件成立,说明当前删除节点为尾节点
//将待删除节点两边的节点先进性连接