迴圈連結串列建立
1.首先回憶一下之前連結串列的建立方式
尾插法建立連結串列
Node *CreateLinkListByTail(int n){
Node *p;
//初始化連結串列的頭結點
LinkList=new Node;
//指標域為空
linkList->next=NULL;
head=LinkList;
for(auto i=0;i<n;i++){
p=new Node;
p->data=i;
LinkList->next=p;
LinkList=p;
}
LinkList->next=NULL;
return head;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2.尾插法建立迴圈連結串列演算法
Node *CreateLoopLinkList(int n){
Node *p;
Node *tail;//指向尾結點的指標
LinkList=new Node;
LinkList->next=NULL;
head=LinkList;
for(auto i=0;i<n;i++){
p=new Node;
p->data=i;
LinkList->next=p;
LinkList=p;
}
//將尾結點賦值給尾指標
tail=LinkList;
//將尾指標的指標域指向頭結點指向的指標域
tail->next=head->next;
return head;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
遍歷連結串列
//遍歷連結串列
void ForeachLinkList(Node *tail, bool isLoopLinkList = false)
{
if (isLoopLinkList)
{
Node *p = tail->next;
while (p->next != head->next)
{
cout << p->data << endl;
p = p->next;
}
return;
}
// 迴圈連結串列的遍歷方式,迴圈輸出連結串列的元素,用於檢測迴圈連結串列是否建立成功
while (head->next)
{
std::cout << head->next->data << " ";
head = head->next;
}
}