链表
一、单链表中删除值相同的多余结点
void delete(LNode *L){
LNode *p,*q;
LNode *delp;
int t;
for(p=L->next;p;p=p->next){
t=p->data;
for(q=p;q->next;q=q->next){
if(!(t-q->next->data)){
delp=q->next;
q->next=delp->next;
free(delp);
}
}
}
}
二、单链表逆序链接
void remove(LNode *L){
LNode *p=L->next;
L->next=NULL;
LNode *q;
while(p){
q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
三、判断单链表元素是否递增
void improve(LNode *L){
LNode *p,*q;
int flag=0;
for(p=L->next;p->next;p=p->next){
if(p->data>p->next->data){
flag=1;
}
}
if(flag){
printf("该单链表不是递增链表");
}else{
printf("该单链表是递增链表");
}
}
四、按价格升序组成循环链表,结构体有价格、数量和指针域
在这里插入代码片
五、单链表分解成两个链表分别存放奇偶数,顺序保持原来相对位置
void remove(LNode *A,LNode *B){
LNode *p,*q,*r;
B=(LNode*)malloc(sizeof(LNode));
B->next=NULL;
r=B;
for(p=L;p->next;p=p->next){
if(!(p->next->data%2)){
q=p->next;
p->next=q->next;
r->next=q;
r=q;
r->next=NULL;
}
}
}
六、递增非空链表删除重复值的结点
void Delete(LNode *&L){
LNode *p=L->next,*delp;
while(p->next){
if(!(p->data-p->next->data)){
delp=p->next;
p->next=delp->next;
free(delp);
}else{
p=p->next;
}
}
}
七、逆序打印单链表中的数据
void printLink(LNode *L){
int *s;
int top=-1;
s=(int*)malloc(100*sizeof(int));
for(p=h;p&&(s[++top]=p->data);p=p->next);
while(top!=-1){
printf("%5d",s[--top]);
}
free(s);
}
八、删除单链表(带头结点) 最小值结点
void deleteMin(LNode *L){
LNode *p,*delp;
int x=L->next->data;
for(p=L->next;p->next;p=p->next){
if(p->next-data<x){
x=p->next->data;
}
}
for(p=L;p&&(p->next->data-x);p=p->next);
delp=p->next;
p->next=delp->next;
free(delp);
}
九、两个递增链表并成一个递减链表
void linkList(LNode *A,LNode *B,LNode *C){
LNode *p=A->next,*k;
LNode *q=B->next,*t;
free(B);
C=A;
C->next=NULL;
LNode *r=C;
while(p&&q){
if(p->data<=q->data){
k=p;
p=p->next;
k->next=r->next;
r->next=k;
r=r-next;
}else{
t=q;
q=q->next;
t->next=r->next;
r->next=t;
r=r-next;
}
}
if(p){
while(p){
k=p;
p=p->next;
k->next=r->next;
r->next=k;
r=r-next;
}
}
if(q){
while(q){
t=q;
q=q->next;
t->next=r->next;
r->next=t;
r=r-next;
}
}
r->next=NULL;
}