题目描述:
给你单链表的头结点head,请你反转链表,并返回反转后的链表。
要求:
链表可以选用迭代或递归方式完成反转。请用两种方式解决。
测试用例:
输入:head=[1,2,3,4,5]
输出:[5,4,3,2,1]
输入:head = [1,2]
输出:[2,1]
输入:head = []
输出:[]
提示:
链表中节点的数目范围是[0,5000]
-5000<=Node.val<=5000
源代码:
递归:
public ListNode reverseList(ListNode head){
if(head==null||head.next==null){
return head;}
ListNode next =head.next;
ListNode newHead=reverseList(next);
next.next=head;
head.next=null;
return newHead;
}
头插法:
public ListNode reverseList(ListNode head){
ListNode newHead =new ListNode(-1);
while(head!=null){
ListNode next =head.next;
head.next=newHead.next;
newHead.next=head;
head=next;
}
return newHead.next;
}