题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
4个主要节点,一个m-1之前,m-n反转链表,一个n+1,
解题过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode node = dummy; if(node == null)return head; int begin = m-1; int end = n+1; int index = 0; ListNode preBegin = null; ListNode nextEnd = null; ListNode reverse = new ListNode(-1); ListNode reverseLast = reverse; while(node!= null){ if(index == begin){ preBegin = node; } if(index == end){ nextEnd = node; } if(index > begin && index < end){ ListNode newNode = new ListNode(node.val); ListNode next = reverse.next; reverse.next = newNode; newNode.next = next; if(index == m){ reverseLast = newNode; } } index++; node = node.next; } preBegin.next = reverse.next; reverseLast.next = nextEnd; return dummy.next; } }
|
执行结果
执行用时 :1 ms, 在所有 Java 提交中击败了87.25%的用户
内存消耗 :35.2 MB, 在所有 Java 提交中击败了48.42%的用户