leetcode : Reverse Linked List II [two pointers]
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For 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.
tag: two pointer
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if(head == null || head.next == null|| m >= n || m <= 0 || n <= 0 ) { return head; } ListNode dummy = new ListNode(0); dummy.next = head; head = dummy; for(int i = 1; i < m; i++) { if(head == null) { return null; } head = head.next; } ListNode preM = head; ListNode mNode = head.next; ListNode nNode = mNode; ListNode nextN = mNode.next; for(int j = m; j < n; j++) { if(nextN == null) { return null; } ListNode tmp = nextN.next; nextN.next = nNode; nNode = nextN; nextN = tmp; } preM.next = nNode; mNode.next = nextN; return dummy.next; } }