Преобразование линейного связанного списка в круговой связанный список - PullRequest
1 голос
/ 20 января 2011

У меня есть несколько вопросов к следующему коду. Пожалуйста, потерпите меня. Код может быть легким для понимания, но я все еще нахожусь в процессе обучения, так что это все еще абстрактно для меня.

struct listNode {
int data;
struct listNode *next };

//Is J a pointer, pointing to the head of the linked list?
struct listNode * convert ( struct listNode * J) {

if (J == NULL) 
    return NULL; 

//Is this creating a new temporary pointer that will traverse the linked list?
//Is it being set to J so that it can start at the first node and go to the last?
struct listNode * temp = J; 

while ( temp -> next != NULL) 
    temp = temp->next; //Is this where the temp pointer actually goes through the list?

//Temp->next will eventually become the last node of the list and that will be set to J
//which is the head pointer?
  temp->next = J; 

return temp;
}

1 Ответ

3 голосов
/ 20 января 2011

Все, что вы написали как комментарии, является правдой, и в конце вы можете рассматривать любую точку как head, поскольку теперь это круговой список

единственная разница между линейным связанным спискоми круговой является то, что последний узел указывает на NULL в первом случае или указывает на первый узел для второго.

Алгоритм:

1) Вы берете указатель temp, чтобы найти последний узел (инициализируйте его с помощью J, заголовка и анализируйте список, пока не нажмете NULL)

2) , на который вы указываетеtemp, который теперь является последним узлом, до первого узла, который является J

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...