1. 程式人生 > >迴圈連結串列建立

迴圈連結串列建立

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;
    }
}