⑴ 急急急!!!单链表逆置,求高手改错!
下面几句话问题很严重,导致了r所指的结点后的链断裂!
r=head->next ;
p=head->next ->next ;
s->next =p->next ;
p->next =r;
r->next =NULL;
r=p;
其实,实现是想很简单,不需要在新建一个新空头结点。只需要利用原来的头结点即可,思想如下:
将H头结点后的结点依次挂到空头结点之后即可,每次都挂在H->next上,这样就实现了逆序排列。
代码如下:
Node *ReverseList(Node *head)
{
Node *p, *tail, *s;
p=head->next; //p指向第一个有效结点
head->next = NULL; //摘下头结点
while(p != NULL) //后移p直至最后一个结点
{
s = p; //取下结点
p = p->next; //p后移到下一个结点
tail = head->next;
head->next = s;
s->next = tail; //尾部挂在s后面
}
return head;
}