Reverse List

Iterative: Use pre node and cur node to handle.

//    1 -> 2 -> 3 -> NULL
// p  c
//    p    c
//         p    c
//              p     c
public ListNode reverse(ListNode head) {
    ListNode pre = null;
    ListNode cur = head;
    while(cur!=null) {
        ListNode tmp = cur.next;
        cur.next = pre;
        pre = cur;
        cur = tmp;
    }
    return pre;
}

Recursive:

//    1 -> 2 -|> 3 -> NULL
//    1 -> 2 <- 3     
//    1 -|> 2 <- 3 
//    1 <- 2 <- 3 
public ListNode reverse(ListNode head) {
    if(head == null || head.next==null) return head;
    ListNode newHead = reverse(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
}

Last updated