我想知道是否存在一种逻辑可以仅使用两个指针来反转单链表。
以下方法使用三个指针,分别为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;
}
有没有其他替代方法来反转链表?在时间复杂度方面,反转单向链表的最佳逻辑是什么?