Интересно, существует ли какая-то логика, чтобы перевернуть односвязный список, используя только два указателя.
Следующее используется для обращения к единому связанному списку с использованием трех указателей, а именно p
, q
, r
:
struct node {
int data;
struct node *link;
};
void reverse() {
struct node *p = first,
*q = NULL,
*r;
while (p != NULL) {
r = q;
q = p;
p = p->link;
q->link = r;
}
first = q;
}
Есть ли другой альтернативный вариант, чтобы перевернуть связанный список? Какова была бы лучшая логика, чтобы перевернуть односвязный список, с точки зрения сложности времени?