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 6 years ago