反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL
解题思路:
将第m个节点之后的(n-m)个节点依次插入第m个节点之前。
如示例中
将节点3插入1 、2中,1->3->2->4->5->NULL
将节点4插入1 、3中,1->4->3->2->5->NULL
定义两个指针p,q分别指向节点1与节点2,将q后面的节点插入p后面。
代码如下:
public static ListNode test(ListNode head, int m, int n) { if (m == n) return head; ListNode h = new ListNode(0); h.next = head; ListNode p = h; for (int i=1; i<m; i++) p = p.next; ListNode q = p.next; ListNode temp; for (int i=m; i<n; i++) { temp = q.next; q.next = temp.next; temp.next = p.next; p.next = temp; } return h.next; }
posted on 2018-05-24 19:38 Deltadeblog 阅读(335) 评论(0) 编辑 收藏 举报