//试写一算法,对单链表实现就地逆置,
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;
}
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;
}
}
一共有两种方法,第一种方法有些困难,第二种方法使用较多。