---------------start reading---------------
链表逆置就是把最后以一个提到坐前面,倒数第二个放到第二个……直到第一个到最后一个。
由于链表没有下标,所以不能借助下表来实行数据的逆置,要靠空间的转移来完成链表的逆置
方法一
利用头插思想(最重要!)
将头节点提出来,将第一个数据结点next置成NULL进行头插,再将第二个数据结点进行头插,第三个数据结点进行头插……直到最后一个数据结点头插进链表。
这里利用了头插的特性,在进行头插的时候如果插入1-5结果就显示5、4、3、2、1,所以我们将整个链表再进行头插链表就可以逆置,变成1、2、3、4、5.
具体操作如下
void Reverse(List plist)//考试的重点内容
{
if(plist==NULL || plist->next==NULL || plist->next->next==NULL)
{
return ;
}
//下面的时间复杂度为O(n),并且最好,利用头插的思想
Node *p = plist->next;
Node *q;
plist->next = NULL;//
while(p != NULL)
{
q = p->next;
p->next = p