一次遍历就能将链表逆序,
思想:p1,p2,p3,将p2放到p1前面,然后p2作为新表头,循环依次,最后将最后的表头p1放到头结点后一个,即完成逆序
void *reverse(list *head)
{
list *p1 = NULL;
list *p2 = NULL;
list *p3 = NULL;
p1 = head;
p2 = p1->next;
int flag = 1;
if(p2 == NULL)
{
printf("空\n");
return ;
}
while(p2 != NULL)
{
p3 = p2->next;
p2->next = p1;
if(flag == 1)
{
p2->next = NULL;
}
p1 = p2;
p2 = p3;
flag = 0;
}
head->next = p1;
return head;
}