单链表的翻转是面试中经常出现的面试题,下面是采用倒插法实现的代码:
struct node* reverse(struct node *head){
struct node *pReversedHead, *qUnReversedHead, *rTmp;
pReversedHead = NULL;
qUnReversedHead = head;
while(qUnReversedHead){
rTmp = qUnReversedHead->next;
qUnReversedHead->next = pReversedHead;
pReversedHead = qUnReversedHead;
qUnReversedHead = rTmp;
}
return pReversedHead;
}
采用一次遍历链表就地逆置的倒插法,将未逆置部分的节点插入到以逆置部分的最前面,从而实现整个链表的逆置。具体为将链表分为两个部分:1.已经完成逆置的链表 2.还未完成逆置的链表,pReversedHead指向已经逆置链表的头, qUnReversedHead指向未逆置链表部分的头,rTmp指向qUnReversedHead的下一个节点。
步骤如下: