首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python实现单向循环链表

单向循环链表中,尾节点的链接域指向头节点。 二、定义一个单向循环链表类 实例化一个单向循环链表时,这个链表是一个空链表,把节点依次“链接”上去后,链表中才有节点和数据。...在链表中,要找到链表的某个节点,需要从链表的头节点开始,依次寻找,所以在实例化单向循环链表时,必须定义好链表的“头”,当加入头节点时,将链表的“头”指向头节点。...定义一个单向循环链表类 SingleCycleLinkList,初始化一个单向循环链表时,链表的“头”指向空值,默认为空链表。...is_empty() ,实例化单向循环链表时,默认是空的,链表的头指向为空。...这里要注意单向循环链表单向链表的区别,遍历时单向链表的尾节点是指向空,单向循环链表的尾节点是指向头节点,不仅要修改判断的条件,还要注意尾节点是否已经进行了逻辑处理,不能漏了。

1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python 实现单向循环链表

    循环链表的概念 1.什么是循环链表   所谓的循环链表就是让单向链表的首尾相连,组成一个环状。 2.循环链表的典型应用   约瑟夫环问题。...3.实现循环链表的重点   1,循环链表在插入第一个元素的时候,需要我们将第一元素的指针域指向其自身,也就构成了循环链表。   2,循环链表基于单向链表而生,单是比循环链表多了游标这个概念。...要想实现循环链表的插入,删除的关键是考虑头结点问题,因为在头插法方式(往链表的头部插入数据)中,需要将末尾数据元素的指针域指向新插入的节点。...usr/bin/env python # -*- coding:utf-8 -*- """ @author:yzk13 @time: 2018/04/17 单向循环链表 """ class...:', l.search(7)) # ------- 测试长度---------- print('链表长度为: ', l.length)

    1.5K60

    约瑟夫环问题(单向循环链表实现)

    算法分析: 采用单向循环链表的数据结构,即将链表的尾元素指针指向链首元素。每个结点除了指针域外,还有两个分别存放每个人的编号和所持有的密码。...解决问题的基本步骤如下: 1.建立n个结点(无头结点)的单向循环链表 2.从链表第一个结点开始循环计数寻找第m个结点。...//密码 struct NodeType *next; //用于指向下一个结点的指针 }NodeType; void CreaList(NodeType **,int);//创建单向循环链表...scanf("%d",&n); }while(n>MAX); printf("请输入初始密码m: "); scanf("%d",&m); CreaList(&pHead,n); //创建单向循环链表...=*ppHead; }else{ pNew->next=pCur->next; pCur->next=pNew; pCur=pNew; } } printf("完成单向循环链表的创建

    37420

    【说站】Python单向循环链表的创建

    Python单向循环链表的创建 说明 1、当实例化一个单向循环链表时,该链表是一个空链表,在将节点依次链接之后,链表中才会出现节点和数据。...2、在链表中,为了找到链表的某个节点,需要从链表的头节点开始,依次搜索。 因此,在实例单向循环链表中,必须定义链表的头。当添加头节点时,链表的头指向头节点。...        # 定义next指向空         self.next = None     class SingleCircularLinkList(object):     """     单向循环链表...:单链表的一个变形是单向循环链表链表中最后一个节点的next域不再为none,而是指向链表的头节点     """       def __init__(self, node=None):         ...ll.insert(-1,9) #  9 8 55 2 1 8 2345     ll.insert(2,100) #9 8 100 55 2 1 8 2345     ll.travel() 以上就是Python单向循环链表的创建

    48020

    数据结构(05)_链表01(单链表、静态单链表单向循环链表

    链式存储结构的逻辑结构:   1.2.单链表   单链表中的节点定义: 注意:这里的struct是用来定义一个类,与class的访问属性相反,默认为public单链表的内部结构:头节点在单链表中的意义是...1.3.单链表的插入与删除:   插入:    node->value = e; node->next = current->next; Current->next = node...;   删除:    toDel = current->next; current->next = toDel->nex; delete toDel;   2.单链表的实现...解决方案:头节点构造时单向循环链表,避免调用泛指类型的构造函数,也即是说要自定义头节点的类型,并且该类型是一个匿名类型    mutable struct : public Object...22.3 单链表的最终实现    template class LinkList : public List { protected: int m_length

    25910

    C 单向链表排序_单向链表排序java

    链表排序 链表排序的两种方式 一、交换结点的数据域 二、断开链表,重新形成 方法 示例 链表排序的两种方式 一、交换结点的数据域 有很多种方法,比如冒泡排序,选择排序等其他排序方法...,重新形成 方法 跟三指针法反转链表类似,也是要定义三个结构体指针。...第一步: 第一个指针用于找最小值 第二个指针用于指向最小值的前一个结点 第三个指针用于遍历链表 第二步: 让最小值从链表当中脱离出来 第三步: 然后再定义一个新的指针,用头插法把指向最小值的指针...形成新的链表,通过调整新链表结点的插入方法和在原链表找最值得到升序或降序的效果。...) //结点数据域比较 { pMin_prev = p; //标记 pMin = p->next; } p = p->next; } //2、将最值结点脱离出原链表 if(pMin == head)

    64340

    单向链表

    在做缓存设计的时候,可以用到链表的数据结构来做缓存设计。主体结构采用map,而存储的节点、数据采用双向链表。这里介绍单向链表,因为如果搞懂了单向链表,其实双向链表更好理解。...数据结构中的链表分为单向链表、双向链表循环链表。...单向链表的数据结构中通常会存在数据域和节点域: 如图1:单向链表的数据结构 public class LinkNode{ int value; // 数据域 LinkNode next; //...双向链表:存在前驱节点和后继节点,基于前驱和后继节点可以很方便的表示节点元素间的关系。可以看到与单向链表不同的是存在的节点有前驱节点,同时是双向的。 ?...考虑单向链表中 一种情况:当前节点只有一个节点或者当前的节点与下一个节点不同时,此时进行节点指向。

    47420

    单向循环链表-链表(单链表)的基本操作及C语言实现

    n个结点通过指针域相互链接,组成一个链表。   图3 含有n个结点的链表   图 3 中,由于每个结点中只包含一个指针域,生成的链表又被称为线性链表或单链表。   ...图 4 头结点、头指针和首元结点   单链表中可以没有头结点,但是不能没有头指针!   链表的创建和遍历万事开头难,初始化链表首先要做的就是创建链表的头结点或者首元结点。...  链表中插入头结点,根据插入位置的不同,分为3种:   插入到链表的首部,也就是头结点和首元结点中间;插入到链表中间的某个位置;插入到链表最末端;   图 5 链表中插入结点5   虽然插入位置有区别...c->next=temp->next; temp->next=c; return p; }   注意:首先要保证插入位置的可行性,例如图 5 中单向循环链表,原本只有 5 个结点,插入位置可选择的范围为...:1-6,如果超过6,本身不具备任何意义单向循环链表,程序提示插入位置无效。

    95530

    反转单向链表

    单向链表的反转是一个非常常见的链表类面试题,我在刷leetcode的过程中,发现了有许多链表题目的解法,都是以反转链表为基础进行的。所以我觉得有必要记录一下。 首先先用一张图来理解单链表的反转。 ?...image 单链表的反转,就如上图一样,而单链表的反转也有几种方式,今天我主要是想记录我用得最频繁的迭代的方式。...} } 这就是最基础的一个链表节点,而反转链表的代码,其实非常的短,关键点就在于理解这几行代码究竟让链表产生了什么变化。...一次循环的具体过程就是这样。 所以总结一下单链表的反转: 保存当前头结点的下个节点。 将当前头结点的下一个节点指向“上一个节点”,这一步是实现了反转。 将当前头结点设置为“上一个节点”。...这样说起来确实有点拗口,但是我推荐大家在做链表类题目和理解链表的具体行为时,用一张纸和笔来辅助自己写写画画,相信很快你就会弄懂链表的具体思路的。

    66110

    单向链表漫谈

    相爱相杀好基友——数组与链表 作为线性表的两种存储方式 —— 链表和数组,这对相爱相杀的好基友有着各自的优缺点。接下来,我们梳理一下这两种方式。...链表,由若干个结点组成,每个结点包含数据域和指针域。结点结构如下图所示: 一般来讲,链表中只会有一个结点的指针域为空,该结点为尾结点,其他结点的指针域都会存储一个结点的内存地址。...链表中也只会有一个结点的内存地址没有存储在其他结点的指针域,该结点称为头结点。 链表的存储方式使得它可以高效的在指定位置插入与删除,时间复杂度均为 O(1)。...设链表有 n 个元素,那么最多移动 n/2 轮。...根据上述表述得出,如果一个链表存在环,那么快慢指针必然会相遇。

    42500

    两个单向循环链表的合并(带头结点)

    两个单向循环链表的合并(带头结点) 问题引入: 已知两个带头结点的单向循环链表,LA和LB分别是链表的头指针,LA=(a1,a2…am),LB=(b1,b2,…bm),编写算法,将LA和LB合并成一个单项循环链表...最后释放多余的LB这个头结点 typedef struct node { DataType data; struct node *next; }*LSNode; //两个带头结点的单向循环链表合并...= head) { p = p->next; printf("%d ", p->data); } printf("\n"); } //两个带头结点的循环链表合并 LSNode merge(...+) { Insert(head, i, i + 1); Insert(head1, i, i + 11); } print(head); print(head1); //执行两个单项循环链表的合并...printf("执行两个带头结点单项循环链表的合并:\n"); head2 = merge(head, head1); print(head2); return 0; } 测试结果:

    59930
    领券