https://leetcode.com/problems/reverse-linked-list/
解法1(iterative):
// 定义三个指针,当前node的指针curr,前置节点node,后置节点next
// 每次遍历将后续的所有结点当成一块,由next 指向,将前置部分由prev指向,遍历所有节点,得到结果
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
ListNode next = head;
while(curr != null) {
next = next.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
解法2: recursion
/* 当执行完reverseList的递归调用后,返回的应该为上图所示。我们应该做的只有将虚线框的范围和head连
接起来。
*/
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode newHead = reverseList (head.next);
head.next.next = head;
head.next = null;
return newHead;
}