bool del_x_linklist(LinkList &L,int val){
int val= x;
int k=0;
LNode *pre=L;
LNode *q;
LNOde *p=pre->next;
while(p!=NULL){
if(p->data==x)
q=e;
p=p->next;
pre->next=p;
free(q);
else
p=pre;
pre=pre->next;
return true;
}
}
//尾插法建立
bool del_X2_LinkList(LinkList &L,int val){
int val=x;
LNode *tail=L;
LNOde *s=L->next;
LNode *q
while(s!=NULL){
if(s->data!=val)
{
tail->next=s;
tail=s;
s=s->next;
}
else{
q=s;
s=s->next;
free(q);
}
}
tail->next=NULL;
return ture;
反向输出链表节点的值
1.采用栈的思想,把链表的每个节点放到栈中,然后在从栈顶端开始输出值
2.忽略头结点从第二个节点开始输出
void rever_print(Linklist &L){
if(L->next!=NULL)
rever_print(L->next);
if(L!=NULL)
print(L->data);
}
void rever_ignore_print(Linklist &L){
if(L!=NULL)
rever_pint(L->next);
}
尝试删除带有头结点的单链表中最小值的节点
bool delminlinklist(Linklist &L){
Lnode *pre=L,*p=L->next;
Lnode *minpre=pre,*minp=L->next;
while(p!=NULL){
if(p->data<minp->data)
{
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp)'
return true;
}
5.将链表逆置(不会)
思路一:头插法 头插法特点:元素顺序与输入顺序相反
bool reverselinklist_1(Linklist &L){
Lnode *p,*tail;
p=L->next; 从第一个元素节点开始
L->next=NULL;
while(p!=NULL){
tail=p->next; //tail不断链
p->next=L->next;
L->next=p;
p=tail;
}
return true;
}
用三个节点来进行逆置 pre p tail 将P节点指针转向进行断链,此时tail无影响继续遍历
bool reverselinklist(Linklist &L){
Lnode *pre,p=L,tail=L->next;
p->next=NULL; //处理第一个元素节点的后继节点为空
while(tail!=NULL){
pre=p;
p=tail;
tail=tail->next;
P->next=pre;
}
//处理最后一个节点
L->next=p;
return true;
}
f
6.设计一个算法使带有头结点的单链表单增有序
思想:断链分前后部分:为了防止断链,进行遍历,需要利用后驱节点
前半部分最开始一个数据节点 断链
bool sortuplist(Linklist &L){
LNode *pre;
LNode *p=L->next;tail=p->next;
p->next=NULL;
p=tail;
while(p!=NULL){
tail=p->next;
pre=L;
while(p!==NULL&&pre->data<p->data){
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=tail;
}
}
7.删除一个无序链表中位于界定两个值之间的节点(有函数参数给出)
bool dellist(Linklist &L,int max,int min){
LNode *pre=L,*p=L->next;
while(p!=NULL) {
if(p->data>=min&&p->data<=max){
pre->next=p->next;
free(p);
p=pre->next;
}
else
pre=p;
p=p->next;
}
}
8.找出两个链表公共节点
思路:长短链表寻找链表:同步遍历,长度长的链表先遍历
Linklist samelinkst (Linklist len1,Linklist len2){
Linklist longlist,shortlist;
int len1=length(long),len2=length(short);
int dis;
if(len1<len2){
longlist=len2;
shortlist=len1;
dis=len2-len1;
}
else{
longlist=len1;
shortlist=len2;
dis=len1-len2;
}
while(dis--)
longlist=longlist->next;
}