反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明: 1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
实现思路
- 反转[m,n]之间的子链表:需记录m的前一个节点,n的后一个节点
- 反转后链表插入原链表;
涉及单链表的按索引查找元素,插入,删除操作知识
代码
| 12
 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
 
 | public static 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; i++) {
 cur = cur.next;
 }
 
 ListNode  last = cur.next;
 
 ListNode front= cur;
 
 ListNode pre= null;
 for (int i = m; i <= n; i++) {
 cur = front.next;
 front.next = cur.next;
 cur.next = pre;
 pre= cur;
 }
 
 cur= front.next;
 
 front.next = pre;
 
 last.next= cur;
 return dummy.next;
 }
 
 |