反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
@Override
class Solution
{
ListNode pre=null;
Public ListNode reverseList(ListNode head)
{
if(head==null)
return head;
if(head.next==null)
{
head.next=pre;
return head;
}
ListNode next=head.next;
head.next=pre;
pre=head;
return reverseList(next);
}
}
分析总结:
1.当链表为空时,直接返回头节点。
2.当链表不为空时,使用递归思想。
pre用来引用前驱节点,next引用后继节点,head为当前节点。
每次递归先判断当前节点是否为尾节点:
若为尾节点,则将pre所引用节点作为其后继节点然后返回尾节点。
若不为尾节点,则先保存其后继节点,再将pre所引用节点作为其后继节点并同时更改pre引用当前节点,进入下一次递归。