方法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;
}
}