非递归反转
node* reverse(node* head) {
node* a=NULL, b=head, c=NULL;//设一个哨兵节点a
while (b) {
c = b->next;
b->next = a;
a=b; b=c;//注意这里赋值不要反了 等同于“将赋值号右边的节点c另起一个名,该名为赋值号左边的节点b”
}
}
递归反转
node* reverse(node* head) {
if (head || head->next) {//当链表为空的时候逆置
return head;
}
node * newhead=reverse(head->next);//递归到最后一步后把最后一个节点设为新头
head->next->next = head;
head->next = NULL;//确保原先的头逆置为尾之后指向NULL
return newhead;