指针,双链表问题,高手请进
#include〈stdio.h〉
#include〈string.h〉
#include〈malloc.h〉
typedef struct node { char d ;
struct node *fpt ; /*后继指针*/
struct node*bpt ; /*前趋指针*/
}NODE ;
NODE *building( char *s ) /*生成双向循环链表*/
{ NODE *p = NULL , *q ;
while ( *s ){
q = ( NODE * ) malloc( sizeof( NODE ) ) ;
q -> ch = *s++ ;
if ( p = NULL ) p = q -> fpt = q -> b t = q ;
else {
p -> bpt -> fpt = q ;
q -> fpt = p ;
q -〉bpt = p->bpt;
p->bpt = q ;
}
}
return
}
上面的程序是通过
p->bpt->fpt=q;
p->bpt=q;
来实现p指针的移动吗???
p->bpt->fpt=q是否是p=q,怎样理解??
书上说p->bpt->fpt=p->fpt->bpt=p,如果是这样,程序岂不出错了?先p=q,以后的语句岂不乱了?
请说明上面的程序是怎样实现p指针的移动的?
书上程序如下,通过p=q来实现p指针的移动,但是它是在最后呀
typedef struct node { char d ;
struct node *fpt ; /*后继指针*/
struct node*bpt ; /*前趋指针*/
}NODE ;
NODE *building( char *s ) /*生成双向循环链表*/
{ NODE *p = NULL , *q ,*head=NULL ;
while ( *s ){
q = ( NODE * ) malloc( sizeof( NODE ) ) ;
q -> ch = *s++ ;
if ( p = NULL ) head=p = q -> fpt = q -> b t = q ;
else
{ p->fpt=q;
q->bpt=p;
p=q;
}
head->fpt=p;
p->bpt=head;
}