反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
方法1:迭代
有一个指针始终保存下下个指针,将当前指针与下一个指针翻转
ListNode* reverseList(ListNode* head) {
if(head==NULL) return head;
ListNode *p=head->next;
head->next=NULL;
while(p)
{
ListNode *p1=p;
p=p->next;
p1->next=head;
head=p1;
}
return head;
}
方法2:递归
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode* p=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return p;
}