原题描述
Reverse Linked List
Reverse a singly linked list.
分析
使用递归,将链表反向转化为两个节点的反向。策略为先将后一节点反向,再把后一节点指向前一节点。最后记住将之前的头指针指向NULL。
代码示例
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void recurse(ListNode* head)
{
if (head -> next != NULL)
{
recurse(head -> next);
head -> next -> next = head;
}
}
ListNode* reverseList(ListNode* head)
{
if(head == NULL)
return NULL;
ListNode* result = head;
while (result -> next != NULL)
{
result = result -> next;
}
recurse(head);
head -> next = NULL;
return result;
}
};