void Reverse1(List PList)
{
/*
*** 如果传入的指针为空||只有头结点||只有一个节点,不用逆置 ***
*/
if(PList == NULL || PList->next == NULL || PList->next->next == NULL)
{
return;
}
/* 不用担心程序崩溃 */
Node *p = PList->next;
Node *q = PList->next->next;
Node *s = NULL;
/* 先将原本的第一个节点的next置为NULL,变成尾节点 */
p->next =NULL;
while(q != NULL)
{
/* s是还未进行逆置的的一个节点,不能在循环尾部,否则程序会崩溃 */
s = q->next;
/* 节点q->next置为p,则q指向p,完成两个节点的逆置 */
q->next = p;
/* 将q赋值给p,即将p向前移动一个节点 */
p = q;
/* q向前移动一个节点 */
q = s;
}
/* 将头节点进行绑定 */
PList->next = p;
}
/* 利用头插实现单链表的逆置 */
void Reverse2(List PList)
{
assert(PList != NULL);
Node *p = PList->next;
Node *q;
/* 断开头结点 */
PList->next = NULL;
/* 将原本头结点后每一个第一个节点头插到链表中去 */
while(p != NULL)
{
q = p->next;
p->next = PList->next;
PList->next = p;
p = q;
}
}