lintcode,翻转链表 II

来源:互联网 发布:java商品信息管理系统 编辑:程序博客网 时间:2024/05/21 09:08

翻转链表中第m个节点到第n个节点的部分
样例
给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null
挑战
在原地一次翻转完成

一刷ac
解题思路:注意细节,和翻转链表类似,将链表分割为三部分,中间部分为要翻转的部分,然后拼接。

/** * Definition for ListNode * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {    /**     * @param ListNode head is the head of the linked list      * @oaram m and n     * @return: The head of the reversed ListNode     */    public ListNode reverseBetween(ListNode head, int m , int n) {        if(head == null) return head;        ListNode node = head;        ListNode res = new ListNode(0);        ListNode prev = res;        prev.next = head;        int len = 1;        for(int i = len; i < n; i++){            if(i < m){                prev = node;                node = node.next;            }else node = node.next;        }        ListNode next = node.next;        node.next = null;        node = prev.next;        prev.next = null;        ListNode dummy = null;        while(node != null){            ListNode tmp = node.next;            node.next = dummy;            dummy = node;            node = tmp;        }        ListNode dummytail = dummy;        while(dummytail.next != null) dummytail = dummytail.next;        prev.next = dummy;        dummytail.next = next;        return res.next;    }}
0 0
原创粉丝点击