链表逆序
单链表带头节点的链表逆序方法
链表定义如下
typedef int ElementType;
typedef struct TolNode*TolList;
typedef TolList TList;
struct TolNode{
ElementType Data;
TolList Next;
};
这是单向带头节点的链表逆置函数,头结点没有储存任何数据;
前期准备函数,判断链表的长度
int TLong(TList l)//给出链表储存数据的长度
{
int n=0;
PositionL l1=l->Next;
while(l1)
{
n++;
l1=l1->Next;
}
return n;
}
此函数是一个非常简单的判断带头节点的链表长度,只需要层层搜索下去,直到最后一个节点的Next 为0为止;
准备工作已完成,正式整活
首先先粘上代码
void TReversePlacement(TList l)//就地逆置链表储存的元素——单链表
{
TList l1=l,led=l->Next;
int length=TLong(l);
for(int i=0;i<length-1;i++)
{
led=led->Next;
}
if(length==1)
{
return;
}
if(length>=2)
{
TList l0,l2;
for(int j=0;j<=length-2;j++)
{
l0=l1->Next;
for(int n=0;n<length-j-2;n++)
{
l0=l0->Next;
}
l2=l0->Next;
l2->Next=l0;
if(length-j-2==0)
{
l0->Next=NULL;
}
}
l->Next=led;
}
}