#include <iostream>
#include <stack>
using namespace std;
typedef struct List{
int data;
struct List *next;
}Lnode,*LinkList;
void deleElem01(LinkList &L,int a){
Lnode *p;
if(L==NULL)
return;
if(L->data==a){
p=L;
L=L->next;
free(p);
deleElem01(L,a);
}
else
{
deleElem01(L->next,a);
}
}
void deleElem02(LinkList &L,int a){
Lnode *p=L->next;
Lnode *pre=L;
Lnode *q;
if(L==NULL)
return;
while(p!=NULL){
if(p->data==a){
q=p;
p=p->next;
pre->next=p;
free(q);
}
else
{
pre=p;
p=p->next;
}
}
}
void RevPrint01(LinkList L){
if(L->next!=NULL){
RevPrint01(L->next);
}
printf("%d",L->data);
}
typedef struct Stack
{
int * base;
int * top;
}Stack;
Stack creat_stack()
{
Stack s;
s.base = (int *)malloc(sizeof(int) * 100);
s.top = s.base;
return s;
}
void push(Stack &s, int val)
{
if((s.top - s.base) > 100)
{
printf("栈满!");
return;
}
else
{
*(s.top) = val;
s.top ++;
}
}
void RevPrint02(LinkList L){
Stack s = creat_stack();
Lnode *p=L;
while(p->next!=NULL){
push(s,p->data);
p=p->next;
}
while(s.top!=s.base){
s.top --;
int val = *(s.top);
printf("%d",val);
}
}
void delListMin(LinkList &L){
Lnode *pre=L,*p=pre->next;
Lnode *minp=p,*minpre=pre;
while(p!=NULL){
if(p->data<minp->data){
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp);
}
void reverList(LinkList &L){
Lnode *p,*r;
p=L->next;
L->next=NULL;
while(p!=NULL){
r=p->next;
p->next=L->next;
L->next=p;
p=r;
}
}
List Reverse( LinkList &L )
{
Lnode *p=NULL;
Lnode *q=NULL;
Lnode *l=L;
while(l!=NULL)
{
q=l;
l=l->next;
q->next=p;
p=q;
}
l=q;
}
void SortList(LinkList &L){
Lnode *p=L->next,*pre;
Lnode *r=p->next;
p->next=NULL;
p=r;
while(p!=NULL){
r=p->next;
pre=L;
while(pre->next!=NULL&&pre->next->data<p->data){
pre=pre->next;
p->next=pre->next;
pre->next=p;
p=r;
}
}
}
void delListBet(LinkList &L,int a,int b){
Lnode *p=L->next,*pre=L;
while(p!=NULL){
if(p->data>a&&p->data<b){
pre->next=p->next;
p=p->next;
free(p);
}
else
{
pre=p;
p=p->next;
}
}
}
void findSameLnode(LinkList L1,LinkList L2){
int len1;
int len2;
int dis;
LinkList longlist,shorlist;
if(len1>len2){
longlist=L1->next;
shorlist=L2->next;
int dis=len1-len2;
}
else{
longlist=L2->next;
shorlist=L1->next;
dis=len2-len1;
}
while(dis!=0){
longlist=longlist->next;
dis--;
}
}
void printMin(LinkList &L){
while(L->next!=NULL){
LinkList pre=L;
LinkList p=pre->next;
while(p->next!=NULL){
if(p->data<pre->next->data)
pre=p;
p=p->next;
}
printf("%d",pre->next->data);
Lnode *u=pre->next;
pre->next=u->next;
free(u);
}
free(L);
}
void ApartList01 (LinkList &L){
LinkList A=(LinkList)malloc(sizeof(Lnode));
LinkList B=(LinkList)malloc(sizeof(Lnode));
A->next=NULL;
B->next=NULL;
Lnode *p=L;
Lnode *a=A;
Lnode *b=B;
int i=0;
while(p!=NULL){
i++;
if(i%2==1){
a->next=p;
a=p;
}
else
{
b->next=p;
b=p;
}
p=p->next;
}
a->next=NULL;
b->next=NULL;
}
void DelSortList(LinkList &L){
Lnode *p=L->next;
if(p==NULL)
return;
Lnode *q;
while(p->next!=NULL){
q=p->next;
if(p->data==q->data){
p->next=q->next;
free(q);
}
else
p=p->next;
}
}
void MergeList(LinkList &L1,LinkList &L2){
Lnode *p=L1->next;
Lnode *q=L2->next;
Lnode *r;
L1->next=NULL;
while(p&&q){
if(p->data<=q->data){
r=p->next;
p->next=L1->next;
L1->next=p;
p=r;
}
else
{
r=q->next;
q->next=L1->next;
L1->next=q;
q=r;
}
}
if(p)
q=p;
while(q){
r=q->next;
q->next=L1->next;
L1->next=q;
q=r;
}
free(L2);
}
void Union(LinkList &L1,LinkList &L2){
Lnode *p=L1->next;
Lnode *q=L2->next;
Lnode *r;
L1->next=NUL;
Lnode *l=L1;
while(p&&q){
if(p->data==q->data){
l->next=p;
l=l->next;
r=p;
p=p->next;
free(r);
r=q;
q=q->next;
free(r);
}
else if(p->data<q->data){
r=p;
p=p->next;
free(r);
}
else{
r=q;
q=q->next;
free(r);
}
}
while(p){
r=p;
p=p->next;
free(r);
}
while(q){
r=q;
q=q->next;
free(r);
}
l->next=NULL;
free(l);
}
int pattern(LinkList &L1,LinkList &L2) {
Lnode *p=L1;
Lnode *q=L2;
Lnode *r=p;
while(q&&p){
if(p->data==q->data){
p=p->next;
q=q->next;
}
else{
r=r->next;
p=r;
q=L1;
}
}
if(q==NULL)
return 1;
else
return 0;
}
int main(int argc, char** argv) {
return 0;
}