链表的逆置,顾名思义是把链表里的数据逆向输出,链表的逆置在链表结构中经常体现,在考试中出现的频率也非常多。所以链表逆置是一个非常重要的知识点。
#pragma once
typedef struct Node
{
int data;
struct Node *next;
}Node,*List;
void InitList(List plist)
{
assert(plist!=NULL);
plist->data=NULL;
}
//方法一:
void Reverse(List plist)
{
if(plist==NULL||plist->next==NULL||plist->next->next==NULL)
{
return ;
}
Node *p=plist->next;
Node *q;
plist->next=NULL;
while(p!=NULL
{
q=p->next;
p->next=plist->next;
plist->next=p;
p=q;
}
}
//方法二:
void Reverse(List plist)
{
Node *p=plist->next;
Node *q=p->next;
Node *s;
p->next=NULL;
while(q!=NULL)
{
s=q->next;
q->next=p;
p=q;
q=s;
}
plist->next=p;
}
注意:
if(plist==NULL||plist->next==NULL||plist->next->next==NULL)
这里plist->next==NULL与plist->next->next==NULL的顺序不能改变,否则会出现错误