示例1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
1.带虚拟头节点
private static ListNode reverseListByDummyNotCreate(ListNode head) {
ListNode ans = new ListNode(-1);
ListNode cur = head;
while(cur != null){
ListNode next = cur.next;
cur.next = ans.next;
ans.next = cur;
cur = next;
}
return ans.next;
}
2.不带虚拟头节点
private static ListNode reverseListBySimple(ListNode head){
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
3.递归
private static ListNode reverseListByRecurse(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode newHead = reverseListByRecurse(head.next);
head.next.next = head;
head.next = null;
return newHead;
}