LintCode-----36.翻转链表 II

来源:互联网 发布:工艺软件有什么 编辑:程序博客网 时间:2024/05/21 14:04

原题目

1.使用中间容器是绝对不会错的

相对来说使用了额外的空间 2928 ms

/** * Definition for ListNode * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { *         val = x; *         next = null; *     } * } */public class Solution {  public ListNode reverseBetween(ListNode head, int m, int n) {        if (head == null) {            return head;        }        int len = getLen(head);        int[] nums = new int[len];        int index = 0;        ListNode p = head;        while (p != null) {            nums[index] = p.val;            p = p.next;            index++;        }        change(nums, m, n);        for (int i = 0; i < nums.length; i++) {            ListNode node = new ListNode(nums[i]);            if (i == 0) {                head = node;                p = head;            } else {                p.next = node;                p = p.next;            }        }        return head;    }    public void change(int[] nums, int m, int n) {        m = m - 1;        n = n - 1;        int mid = (m + n) / 2;        for (int i = 0; i <= mid; i++) {            if (m + i < n - i) {                int temp = nums[m + i];                nums[m + i] = nums[n - i];                nums[n - i] = temp;            }        }    }    public int getLen(ListNode head) {        ListNode p = head;        int counter = 0;        while (p != null) {            counter++;            p = p.next;        }        return counter;    }}
原创粉丝点击