#include <iostream>
#include<stdio.h>
#include<stdlib.h>
int size
=0;
typedef struct no
{
int data
;
struct no
*pnext
;
struct no
*ppre
;
}node
;
typedef struct
{
node head
;
node tail
;
}lht
;
void link_init(lht
*p
)
{
p
->head
.pnext
=&p
->tail
;
p
->head
.ppre
=NULL;
p
->tail
.pnext
=NULL;
p
->tail
.ppre
=&p
->head
;
}
int link_add(lht
*p
,int i
)
{
node
*pf
=NULL,*pm
=NULL,*pl
=NULL,*pn
=NULL;
pn
=(node
*)malloc(sizeof(node
));
if(pn
==NULL)
return 0;
pf
=&p
->head
;
pm
=pf
->pnext
;
pl
=pm
->pnext
;
pf
->pnext
=pn
;
pn
->pnext
=pm
;
pn
->ppre
=pf
;
pm
->ppre
=pn
;
pn
->data
=i
;
size
++;
return 1;
}
int link_sub(lht
*p
,int i
)
{
node
*pf
=NULL,*pm
=NULL,*pl
=NULL,*pn
=NULL;
pf
=&p
->head
;
pm
=pf
->pnext
;
pl
=pm
->pnext
;
pf
->pnext
=pm
->pnext
;
pl
->ppre
=pm
->ppre
;
free(pm
);
pm
=NULL;
size
--;
}
void link_show(const lht
*p
)
{
node
*pn
=(node
*)p
->head
.pnext
;
while(pn
->pnext
!=NULL)
{
printf("%d ",pn
->data
);
pn
=pn
->pnext
;
}
printf("\n");
}
void link_pdhws(lht
*p
)
{
node
*ps
=NULL,*pf
=NULL;
lht check
={0};
link_init(&check
);
ps
=(node
*)p
->head
.pnext
;
pf
=ps
->pnext
;
while(pf
!=&p
->tail
)
{
link_add(&check
,ps
->data
);
if(pf
->pnext
==&p
->tail
)
{
ps
=ps
->pnext
;
break;
}
if(pf
->pnext
->pnext
==&p
->tail
)
{
ps
=ps
->pnext
->pnext
;
break;
}
pf
=pf
->pnext
->pnext
;
ps
=ps
->pnext
;
}
node
*pc
=check
.head
.pnext
;
link_show(&check
);
while(ps
!=&p
->tail
)
{
if(ps
->data
!=pc
->data
)
{
printf("不是回文链表");
return ;
}
ps
=ps
->pnext
;
pc
=pc
->pnext
;
}
printf("是回文数");
}
int main(int argc
, char *argv
[])
{
lht l1
={0};
link_init(&l1
);
link_add(&l1
,1);
link_add(&l1
,2);
link_add(&l1
,3);
link_add(&l1
,3);
link_add(&l1
,1);
link_add(&l1
,1);
link_show(&l1
);
link_pdhws(&l1
);
return 0;
}
转载请注明原文地址: https://mac.8miu.com/read-484332.html