2.2删除带头结点的L中所有值为x的结点
方法1:
/* 用于数据结构第二章线性表的综合应用题*/ //设计一个递归算法,删除带头结点的L中所有值为x的结点 #include <iostream> #include<stdio.h> #include<string.h> using namespace std; //2.1 typedef struct LNode { int data; struct LNode *next; } LNode,*LinkList; int main() { return 0; } void Del_X_1(LinkList &L,int x) { LNode *p=L->next,*pre=L,*q; while(p->next!=NULL) { if(p->data==x) { q=p; //q指向该结点 p=p->next; pre->next=p; //删除*q结点 free(q); } else { pre=p; p=p->next; } } }
方法2
#include <iostream> #include<stdio.h> #include<string.h> using namespace std; /* 用于数据结构第二章线性表的综合应用题*/ //,删除带头结点的L中所有值为x的结点 //2.2方法2 typedef struct LNode { int data; struct LNode *next; } LNode,*LinkList; int main() { return 0; } void Del_X_2(LinkList &L,int x) { LNode *p=L->next,*r=L,*q;//r指向尾结点,其初值为头结点 while(p!=NULL) { if(p->data!=x)//*p结点不为x时将其链接到L尾部 { r->next=p; r=p; p=p->next; } else { q=p; p=p->next;//继续扫描 free(p);//释放空间 } } r->next=NULL; //插入结束后,尾结点指针为NULL }