插一句关于指针:
p,指针即地址。(初学可理解)
&p,&后面跟的是指针,&是取地址符,这里是取指针p的地址。
*p,表示的是以p为地址(也就是p所指向的那个结点)的内存单元所存储的内容,跟上面两个都是表示地址的不一样。由于代表内存单元存储内容,在各算法中会大量使用。
两个地址,一个结点内容。
void Reverselist(Linklist L) //为了提高的可读性,对同一结构体指针类型起了两个名称,Linklist与LNode*,两者本质上是等价的。
通常习惯上用Linklist定义单链表,强调定义的是某个单链表的头指针;用LNode*定义指向单链表中任意结点的指针变量。
例如,若定义Linklist L,则L为单链表的头指针,
若定义LNode *p(*是LNode的*),则p为指向单链表中某个结点的指针,用*p代表该结点.
当然也可以使用定义Linklist p,这种定义形式完全等价于LNode *p.
{
linklist p,q; //如上,p,q为指向单链表中某个结点的指针,*p,*q代表这里的某个结点,也就是指针指向的结点(单独的p,q是指针)
p=q=L->next; //单独的p,q表示这两个指针。而L->next=(*L).next,*L是L指针(头指针)所指向的结点,即头结点,(*L).next是头结点的的下一个结点的地址,即第一个结点。L->next能赋值给p,q,说明他指的是地址。
L->next=null;
whlie(q)
{ q=p->next;
p->next=L->next;
L->next=p;
p=q;
}
}
}