链表的倒置可以:
1、外部算法:使用循环按照起初顺序依次取节点,放入一个新链表的开头。
2、内部算法:与上面类似,最为便利的是,一次循环遍历整个链表,将每次遍历的节点以头插法的方式放到链表的头部,当循环完成,链表完成倒置。
代码如下(带头结点的单链表):
void List::inversionList() //倒置
{
Node *p=m_pHead->m_pNext;
Node *q=p->m_pNext;
p->m_pNext=NULL; //原来的第一个有效节点的指针域赋为NULL
while(q!=NULL) //循环遍历链表
{ //完成当前节点的头插
p=q;
q=q->m_pNext;
p->m_pNext=m_pHead->m_pNext;
m_pHead->m_pNext=p;
}
}
时间复杂度为O(n)。