单向链表是一种非常重要的数据结构。在单向链表中可以实现的常见算法诸如插入、删除都是最为基本的操作。本文将讨论一种对单向链表特殊的操作,即单向链表的逆置。
所谓的逆置,就是在不新建结点的情况下,实现将每个结点的指针域指向由原来的指向后一个结点改为指向前一个结点。具体的实现代码如下:
int INversesingle_Link(LinkList &head)
{
LNode *p,*q,*r;
//q和r将分别指向p的后一个或前一个结点
if(head==NULL||head->next==NULL)
{
return false;
}
r=head;
p=head->next;
while(p!=NULL)
{
//将q前进一个结点
q=p->next;
//如果r为头结点,则将p的指针域指向NULL,否则指向前一个结点
if(r==head)
{
p->next=NULL;
}
else
{
p->next=r;
}
//将r前进一个结点
r=p;
//当q为NULL时将头结点的指针域指向最后一个结点p,使其变为第一个结点。
if(q==NULL)
{
head->next=p;
}
//将p前进一个结点
p=q;
}
return true;
}
如上的代码片段即可实现单向链表的逆置。