typedef struct node{
int data;
struct node *next
}NODE;
NODE *fun(*h)
{
NODE *P,*q,*r;
p=h;
if(p==NULL)
return NULL;
q=p->next;
p->next=NULL;
while(q)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
return p;
}
让不带头结点的链表单向逆置(求具体解释下这个函数)⊙﹏⊙
函数参数声明少了一个NODE。
r=q->next; // 临时变量 r指向当前结点的下一个
q->next=p; // 当前结点q的next指向上一个结点p
p=q; // 将上一个结点的指针移向当前结点q
q=r; // 将当前结点指针q指向原先保存的下一个结点
typedef struct node{
int data;
struct node *next
} NODE;
NODE *fun(NODE * h)
{
if(h==NULL)
return NULL;
NODE *cur=h, *lst=NULL, *nxt=NULL;
for(;cur!=NULL;){
nxt=cur->next;
cur->next=lst;
lst=cur;
cur=nxt;
}
return lst;
}
我修改了一下,估计效率高一些