循环链表定义及操作

循环链表定义

定义与单链表一样,操作时将末结点的指针指向开始结点即可

1
2
3
4
5
typedef struct _LinkNode
{
int data;
struct _LinkNode *next;
}LinkList;

循环链表操作

初始化循环链表

1
2
3
4
5
6
7
8
9
10
11
bool InitList(LinkList* &L)
{
L = new LinkList;

if(!L) return false;

L->next = L;
L->data = 0; //往头结点塞个数据,这时候严格来讲为无头结点循环链表,第一个结点应该叫开始结点

return true;
}

插入(尾插)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
bool ListInsert_back(LinkList* &L, LinkList *node)
{
LinkList *last = NULL;
if(!L || !node) return false;

if(L == L->next)
{
//头结点指针指向了自己(链表只有头结点)
node->next = L;
L->next = node;
}else{
//非空的循环链表
last = L->next;
//寻找尾结点(指向头结点的结点)
while(last->next != L)
{
last = last->next;
}

node->next = L;
last->next = node;
}
return true;
}

输出数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void LinkListPrint(LinkList *L)
{
LinkList *p;
if(!L || L == L->next)
{
cout << "链表为空\n";
return;
}

p = L->next;

while(p != L)
{
cout << p->data << "\t";
p = p->next;
}


cout << endl;
}

作者

CairBin

发布于

2021-09-18

更新于

2021-09-18

许可协议

评论