方法1:
依次将指针反向,最后令头指针指向尾元素。
逆置过程如下:
当q指针为空时,循环结束。
//试写一算法,对单链表实现就地逆置,
void Reverse1(List plist)//太复杂,不用掌握
{assert(plist != NULL);if (plist == NULL||plist->next==NULL||plist->next->next==NULL)return;Node* p = plist->next;//前面的点;Node* q = p->next;//后面的点;Node* r;//后面所有还未处理的第一个点;p->next = NULL;while (q != NULL){r = q->next;q->next = p;//向后转p = q;q = r;}plist->next = p;
}
方法2:
依次取链表中的元素,进行头插,实现链表的逆置。
p为空时,循环结束
void Reverse(List plist)//一定要掌握
{assert(plist != NULL);if (plist == NULL || plist->next == NULL || plist->next->next == NULL)return;Node* p = plist->next;Node* q = p->next;plist->next = NULL;//断开//利用头插把节点插入到链表中while (p != NULL){q = p->next;p->next = plist->next;//头插plist->next = p;p = q;}
}