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

循环链表

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

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

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

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

插入结点:设需要在第三个结点处插入一个结点,将设定的值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

扫描二维码关注公众号,回复: 10642371 查看本文章

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

带尾指针的循环链表

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

终端结点:rear

发布了58 篇原创文章 · 获赞 31 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/104908879
今日推荐