Reverse Linked List I
Reverse a linked list.
Example
For linked list 1->2->3, the reversed linked list is 3->2->1
Challenge
Reverse it in-place and in one-pass
Solution: In-place and one-pass
public ListNode reverse(ListNode head) { if (head == null || head.next == null) { return head; } ListNode dummyHead = new ListNode(0); ListNode runner = head; while (runner != null) { ListNode next = runner.next; runner.next = dummyHead.next; dummyHead.next = runner; runner = next; } return dummyHead.next; }
Reverse Linked List II
Reverse a linked list from position m to n.
Example
Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL.
Note
Given m, n satisfy the following condition: 1 ≤ m ≤ n ≤ length of list.
Challenge
Reverse it in-place and in one-pass
public ListNode reverseBetween(ListNode head, int m , int n) { if (head == null || head.next == null) { return head; } ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode runner = dummyHead; for (int i = 1; i < m; i++) { runner = runner.next; } ListNode preNode = runner; ListNode mNode = runner.next; ListNode nNode = mNode; ListNode postnNode = nNode.next; ListNode dummy = new ListNode(0); for (int i = m; i < n; i++) { ListNode temp = postnNode.next; postnNode.next = nNode; nNode = postnNode; postnNode = temp; } mNode.next = postnNode; preNode.next = nNode; return dummyHead.next; }