首页 > 其他 > 详细

循环链表

时间:2017-06-21 20:29:47      阅读:377      评论:0      收藏:0      [点我收藏+]

  将单链表中终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相连的单链表称为单循环链表,简称循环链表(circular linked list)。

     循环链表解决了从一个节点,访问到链表的全部节点的问题。循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断p->next是否为空,现在则是p->next不等于头结点,则循环结束。

     在单链表中,访问第一个节点需要O(1)的时间,但对于访问最后一个节点,却因为需要将单链表全部扫描一遍,所以需要O(n)的时间。如果用循环链表,我们只需用指向终端节点的尾指针来表示循环链表,此时查找开始节点和终端节点就都很方便了。

   下面是示意图:

                                                                                                              技术分享

下面是实现输出头结点和终端节点的代码:

#include<stdio.h>
#include<stdlib.h>

struct node{
    int a;
    struct node *next;
};

typedef struct node *LinkList;

void CreateList_T(LinkList head, int num)
{
    LinkList p, rear = head;
    while(num--){
        p = new node;
        scanf("%d", &p->a);
        rear->next = p;
        rear = p;
    }
    rear->next = NULL;
}

int main()
{
    int num;
    LinkList head = new node, rear;
    scanf("%d", &num);
    CreateList_T(head, num);
    for(rear = head; rear->next; rear = rear->next);
    rear->next = head;
    printf("%d\n", rear->a);
    printf("%d\n", rear->next->next->a);
    return 0;
}

 

循环链表

原文:http://www.cnblogs.com/didideblog/p/7061531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!