数据结构与算法学习笔记(二)单链表的逆置与循环链表

9 篇文章 1 订阅
6 篇文章 1 订阅

单链表的逆置

思路:现将头表置空,随后使用头插法进行操作。
具体单链表操作见文章:链表的基本操作
分别定义两个指针一个指向移动的数据,另一个指向下一个数据进行移动。

void Reverse_linklist(Linklist H)
{
    Linklist p, q;
    p = H->next;
    H->next = NULL;//置空表
    while(p)
    {
        q = p;
        p = p->next;
        q->next = H->next;
        H->next = q; //头插法进行
    }
}

循环链表

循环链表的基本操作与单链表基本一致,主要是链表的最后一个指向头结点仅此而已。
定义循环链表结点与单链表一致。
//头插法建立

//头插法建立链表
Linklist Creat_Hlinklist()
{
    Linklist H = (Linklist)malloc(sizeof(Linklist));
    H->next = H;//与单链表不同之处
    Linklist p;
    int x = 0;
    scanf("%d", &x);
    while(x!=-1)
    {
        p = (Linklist)malloc(sizeof(Linklist));
        p->data = x;
        p->next = H->next;
        H->next = p;
        scanf("%d", &x);
    }
    return H;
}

其他操作只需要将判断条件更改为尾结点是否指向头结点即可。
比如举一个简单的例子:
求链表的表长:

int linklist_length(Linklist L)
{
    Linklist p = L;
    int j = 0;
    while(p->next!=H)//判断条件不同
    {
        j++;
        p = p->next;
    }
    return j;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值