Leetcode-92. Reverse Linked List II

来源:互联网 发布:知行理工初始密码 编辑:程序博客网 时间:2024/04/19 04:22

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。

博客链接:mcf171的博客

——————————————————————————————

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

这个题目没啥好说的,就是按照题意做Your runtime beats 2.44% of java submissions.

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseBetween(ListNode head, int m, int n) {        if( m == n ) return head;        ListNode headNode = new ListNode(0);        ListNode changeNode = headNode;        changeNode.next = head;        ListNode searchNode = head;        int times = m;        if( m != 1){            while( times > 1){                changeNode = changeNode.next;                searchNode = searchNode.next;                times --;            }        }        if( n - m == 1){            ListNode firstNode = searchNode;            ListNode lastNode = searchNode.next;            firstNode.next = lastNode.next;            lastNode.next = firstNode;            changeNode.next = lastNode;        }else{            times = n - m;            ListNode  nextNode = searchNode.next,lastNode = null,firstNode = searchNode;            while( times >= 1){                ListNode preNode = searchNode;                searchNode = nextNode;                nextNode = nextNode.next;                firstNode.next = nextNode;                searchNode.next = preNode;                lastNode = searchNode;                times--;            }            changeNode.next = lastNode;        }        return headNode.next;    }}





0 0
原创粉丝点击