这道题被爱学习的你看到了,很棒!那今天就花十五分钟的时间,一起来看下反转链表这道算
法题,这道题属于初级程度,不是很难理解。用递归会相对简单些。当然也可以用栈,因为它有一
个后进先出的特点,刚好符合反转这一要求。
这里讲解一下使用递归函数。递归就要一直递归到链表的最后一个结点,那么最后一个结点就是反
转后的头结点,记作 ans。
此后,每次函数在返回的过程中,让当前结点的下一个结点的 next 指针指向当前节点。往回指。
同时让当前结点的 next 指针指向NULL ,从而实现从链表尾部开始的局部反转。当递归函数全部
出栈后,链表反转完成。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* ReverseList(ListNode* phead) {
if (phead == NULL || phead->next == NULL) {
return phead;
}
//递归调用
ListNode* ans = ReverseList(phead->next);
phead->next->next = phead;
phead->next = NULL;
return ans;
}
};