zoukankan      html  css  js  c++  java
  • 循环链表

      将单链表中终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相连的单链表称为单循环链表,简称循环链表(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
    ", rear->a);
        printf("%d
    ", rear->next->next->a);
        return 0;
    }
  • 相关阅读:
    【Other】申请免费的SSL证书及部署Https协议
    【MySql】mysql-5.7.20-winx64安装配置
    【CSharp】C#程序使用.NET Reactor进行混淆加壳
    【Linux】Ubuntu安装Python3
    【Linux】Ubuntu安装Googlepinyin中文输入法
    【Linux】Ubuntu修改默认源
    【C/S】FIPS安全验证问题
    【Android】apk文件反编译
    笔记之《用python写网络爬虫》
    memcache (持续了解ing...)
  • 原文地址:https://www.cnblogs.com/didideblog/p/7061531.html
Copyright © 2011-2022 走看看