在学习链表的时候,基本就是创建,插入,删除这几种操作,掌握这几种操作之后,对于这种类型链表的学习,才可以说是基本掌握了,而在这几种基础上,我就来谈一谈单链表的逆置输出吧
先来看一看教科书上的基本写法:用头插法实现单链表的逆置输出
Head *Inversion(Head *head)
{
Head *p,*q;
p = head->next;
q = head->next->next;
while(head->next != NULL){ //当q为空时结束循环
p->next = p->next->next;//p指向需要逆置的下一个结点
q->next = head->next;
head->next = q;//插入完成
q = p->next;//q指向下一个需要逆置的结点
}
while(head != NULL){//输出逆置过后的链表
printf("%d",&(head->data));
head = head->next;
}
}
其实这种操作用递归的话,可能会更简单,更容易理解一些
void Inversion_2(Head *head)
{
if(head->next != NULL)//当head->next 指向空时输出此时数据
Inversion_2(head->next);
printf("%d",head->data);
}
虽然这样比较简单,但是没有改变原链表,只是输出了逆置的数据,所以适用范围应该也不会很大?