方法一:借助辅助结点
cpp
void Reverse1(Node* plist) {
//0.最少两个节点才逆置、
if (Get_length(plist) < 2) return;
//1.申请两个指针p和q,p初始化指向第一个有效节点,q初始化指向第二个有效结点
Node* p = plist->next;
Node* q = p->next;
//2.将辅助结点的next置为NULL
plist->next = NULL;
//3.进入while循环,循环条件是p指向的节点得存在
while (p != NULL) {
q = p->next;
//4.将p指向节点头插到plist链表里
p->next = plist->next;
plist->next = p;
//5.再让p同步到q的位置
p = q;
}
}
方法二:不借助辅助节点
cpp
void Reverse2(Node* plist){
//0.最少两个节点才逆置
if (Get_length(plist) < 2) return;
//1.申请3个指针p和q和r,p初始化指向第一个有效节点,q初始化指向第二个有效结点,r初始化NULL
Node* p = plist->next;
Node* q = p->next;
Node* r = NULL;
p->next = NULL;
//2.进入while循环,循环条件是q指向的节点得存在
while(q!=NULL)
{
//3.通过三个指针p q r相互配合,将p和q之间的箭头逆置
r = q->next;
q->next = p;
p = q;
q = r;
}
//4.当while循环结束,说明3个指针pqr此时已经将所有指针逆置,辅助结点的next保存此时p的地址
plist->next = p;
}