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

在C#中创建循环链表?

在C#中创建循环链表,可以通过以下步骤实现:

  1. 定义一个链表节点类,包含数据和指向下一个节点的指针。
  2. 创建一个链表节点类的实例,作为链表的头节点。
  3. 创建一个循环链表,将头节点的下一个节点指向头节点。
  4. 使用链表节点类的实例,将新节点添加到链表中。

以下是一个简单的C#代码示例:

代码语言:csharp
复制
using System;

public class Node {
    public int Data { get; set; }
    public Node Next { get; set; }

    public Node(int data) {
        Data = data;
        Next = null;
    }
}

public class CircularLinkedList {
    public Node Head { get; set; }

    public CircularLinkedList() {
        Head = null;
    }

    public void AddNode(int data) {
        Node newNode = new Node(data);

        if (Head == null) {
            Head = newNode;
            Head.Next = Head;
        } else {
            Node current = Head;

            while (current.Next != Head) {
                current = current.Next;
            }

            current.Next = newNode;
            newNode.Next = Head;
        }
    }
}

public class Program {
    public static void Main(string[] args) {
        CircularLinkedList list = new CircularLinkedList();

        list.AddNode(1);
        list.AddNode(2);
        list.AddNode(3);
        list.AddNode(4);
        list.AddNode(5);

        Node current = list.Head;

        do {
            Console.WriteLine(current.Data);
            current = current.Next;
        } while (current != list.Head);
    }
}

这个示例中,我们创建了一个循环链表,并向其中添加了5个节点。然后,我们遍历链表并打印出每个节点的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 算法与数据结构之三----循环链表

    /**************************************************************** 文件内容:线性表之循环链表操作 版本V1.0 说明:单链表必需从头结点开始遍历,而循环链表可以从任何地方都可以遍历,只不过只能想后遍历 循环链表的特点: 1.链表头指针和尾指针相接,也就是说没有头指针,也没有尾指针(也没有NULL指针,单链表尾指针为NULL) 2.从任何一个地方开始遍历都可以找到某一个节点X 创建方法: 方法1.先建立两个单链表,然后将一个单链表的头指针链接到另外一个单链表的尾指针。 方法2:在后插入法建立单链表的基础上,每创建一个节点,尾指针总是指向头指针。 判断一个链表是否是循环链表的方法: 对链表进行遍历,如果能找到某个指针域指向NULL,则为单链表,否则就是双链表 循环链表特性: 1.循环链表无法求长度,因为是无限长度的 2.循环链表是无法遍历完毕的,因为是无限长度的 3.循环链表插入,删除,查找跟单链表没有任何区别,只不过单链表有头指针,循环链表没有 头指针,或者说循环链表中任意一个节点指针都是头指针。 作者:HFL 时间:2013-12-25  *****************************************************************/  #include<stdio.h> #include<malloc.h> #include <windows.h> //#define RELEASE_VERSION  //release版本开关 //#define TRIDiTION /*inlude<malloc.h> stdlib.h 包含malloc.h*/ #ifdef RELEASE_VERSION #define  Log  #else #define  Log  printf #endif /*为了提高程序的可移植性,千万不能使用裸露的数据类型*/ #ifndef UINT32  typedef unsigned int UINT32 ; #endif #ifndef INT32  typedef  int  INT32 ; #endif typedef struct CNode { INT32 data; struct CNode *next; }Cnode,*Linklist; /**************************************************************** 函数功能:创建一个循环链表,由单链表中初始化链表2(即尾部创建一个链表)派生而来                         输入参数:  无 返回值:链表的标头指针  说明:要引入一个新的指针变量,用于链接前后节点       在后插入建立单链表的基础上,每次创建一个节点,就将尾指针指向头指针 作者:HFL  时间:2013-12-24  ************T*****************************************************/  Linklist Creat_Clinklist() { Linklist L=NULL; Cnode *s; Cnode *probe =NULL; INT32 x;     scanf("%d",&x); while(x!=0) {  s=(struct CNode *)malloc(sizeof(Cnode));  if(NULL==s) { Log(" sorry,Malloc is failed\n"); } else { Log(" Malloc is successed!\n"); if(L== NULL) { L = s;  //第一个节点就必需保存投节点 } else { probe->next = s; //第二个节点开始,要引入一个临时指针,来暂存上一个节点地址,一遍链接前后两个节点 } probe = s;  //每次创建一个新节点,节点都必需重新移动。 s->data = x ; s->next = L; scanf("%d",&x); } } return L; } /*******************************************************

    01

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

    :编号为1,2…n的n个人按顺时针方向围坐在一张圆桌周围,没人持有一个密码(正整数)。一开始人选一个正整数作为报数上线值m,从第一个人开始按顺时针方向自1报数,报到m时停止报数,报m的那个人出列,将他的密码作为新的m值,从他顺时针方向的下一个人开始重新从1报数,数到m的那个人又出列;如此下去,直至圆桌周围的人全部出列为止。这个游戏的实现只需将每个人的信息作为一个结点,节点中存放每个人的编号和密码,由于要反复做删除操作,所以采用单项循环链表实现较为方便。 算法分析: 采用单向循环链表的数据结构,即将链表的尾元素指针指向链首元素。每个结点除了指针域外,还有两个分别存放每个人的编号和所持有的密码。

    02
    领券