Как вывести `pos` (который является индексом узла, где он соединяется с хвостом) в этой программе? - PullRequest
0 голосов
/ 25 сентября 2019

Учитывая связанный список, верните узел, где начинается цикл.Если цикла нет, верните null.

. Чтобы представить цикл в данном связанном списке, мы используем целое число pos, которое представляет позицию (индексированную 0) в связанном списке, где хвост соединяетсяк.Если pos равно -1, то в связанном списке нет цикла.

Примечание: Не изменять связанный список.

Пример 1:
Вход: head = [3,2,0, -4], pos = 1

Выход: tail соединяется с индексом узла 1

Объяснение: В связанном списке есть цикл, где tail соединяется со вторым узлом.

Пример 2:
Input: head = [1,2], pos = 0

Вывод: tail соединяется с индексом узла 0

Объяснение: В связанном списке есть цикл, где tail соединяется с первым узлом.

Пример 3:
Вход: head = [1], pos = -1

Выход: без цикла

Пояснение: В связанном списке нет циклов.

    #ifndef LISTNODE_H_
    #define LISTNODE_H_
    #include <iostream>

    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };

    class Solution {
    public:
        ListNode *detectCycle(ListNode *head) {
            if(head == NULL)
                return NULL;
            ListNode *p1 = head, *p2 = head;
            do{
                p1 = p1->next;
                p2 = p2->next;
                if(p2 != NULL)
                    p2 = p2->next;
                else
                    break;

            }while(p1 != p2 && p2 != NULL);
            if(p2 == NULL)
                return NULL;
            p1 = head;
            while(p1 != p2){
                p1 = p1->next;
                p2 = p2->next;
            }
            return p1;
        }
    void add(ListNode *&head){
        ListNode *temp = new ListNode;

        cin >> temp->val;
        temp->next = head;
        head = temp;
    }

    void traverseCircle(ListNode *head, int pos){

        for(int i = 0; i < pos; i++){
            head = head->next;
        }


    }

    void showList(ListNode *&head){

        ListNode *temp = head;

        cout << "head = ";

        while(temp){
            cout << temp->val << " ";
            temp = temp->next;

        }

        cout << "\n_____________________" << endl;
        cout << endl << " -- END OF LIST" << endl;
    }
};

#endif

main.cpp

#include <iostream>
#include "ListNode.h"
using namespace std;

int main(){

    Solution list;

    ListNode *head = nullptr;

    int count;

    cout << "How many integers will you enter? A: ";
    cin >> count;

    cout << "Enter " << count << " value(s): ";

    for (int i = 0; i < count; i++){
        list.add(head);
    }

    cout << endl;

    list.showList(head);

    return 0;
}
...