反转从位置 m 到 n 的链表。用一次遍历在原地完成反转。
例如:
给定 1->2->3->4->5->NULL, m = 2 和 n = 4,
返回 1->4->3->2->5->NULL.
注意:
给定 m,n 满足以下条件:
1 ≤ m ≤ n ≤ 列表长度。
详见:https://leetcode.com/problems/reverse-linked-list-ii/description/
Java实现:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { ListNode dummy=new ListNode(-1); dummy.next=head; ListNode cur=dummy; for(int i=1;i<=m-1;++i){ cur=cur.next; } ListNode pre=cur; ListNode last=cur.next; ListNode front=null; for(int i=m;i<=n;++i){ cur=pre.next; pre.next=cur.next; cur.next=front; front=cur; } cur=pre.next; pre.next=front; last.next=cur; return dummy.next; } }