反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
递归法:
迭代法太简单了,这里给出递归法。假设head之后的子链都已经翻转完成。
1->2->3<-4<-5
例如head表示的是2,后续的子链已经完成翻转,那么下一步应该让3->2,也就是head ->next->next=head
,同时需要注意应该将head->next
赋值为NULL
。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (!head || !head->next) {
return head;
}
ListNode* node = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return node;
}
};