数据结构与算法(六)--循环链表

30 篇文章 4 订阅
30 篇文章 0 订阅

循环链表

  将单链表的首尾相接,将终端节点的指针域由空指针改为指向头节点,构成单循环链表,称之为循环链表。

空循环链表是头结点指针指向头结点。

非空循环链表,由头结点指向非头结点的元素:

空表和非空表的处理都需要附加头结点。

插入结点:设需要在第三个结点处插入一个结点,将设定的值x赋给结点S,第二位的结点设为P结点,P结点指针域原来指向的后继结点赋给S结点的指针域,P重新指向S结点。

代码实现:

void Insert(int i , ElemType x){
    P = L; j = 0;
    while(p! = L && j<i-1){    //遍历链表,查找目标位置
        p = p->next;
        j++;
    }
    if(p == null) 
        return 0;
    else{        //在指定位置插入结点
        s = (List)malloc(sizeof(struct LNode));
        s->data = x;
        s->next = p->next;
        p->next = s;
    }
}

循环链表的循环条件:p!=L;  //当不为表头指针一直循环

查找开始结点与终端结点:

开始结点:L->next

终端结点:将单链表遍历一遍,直到达到表的长度,时间复杂度为O(n)。

带尾指针的循环链表

开始结点:rear->next->next

终端结点:rear

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值