带头结点链表逆置

该博客详细介绍了如何实现单链表带头节点的逆序操作。通过前期准备函数计算链表长度,然后在正式的逆序函数中,利用三个指针l1、led和l0进行节点调整,循环n-2次完成逆序。最后,头节点的next指向原来的尾部,从而完成链表的逆序转换。
摘要由CSDN通过智能技术生成

单链表带头节点的链表逆序方法

链表定义如下

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;
    }
}
首先,由于要逆置的为单向链表,因此先保存其头节点。总体思路为,定义两个指针,分别指向未转换的 链表节点,将其节点顺序逆置,然后循环n-2次即可逆序带头节点的单链表,最后将头结点的next指向原来的尾部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值