Leetcode Reverse Linked List II

题目地址:https://leetcode.com/problems/reverse-linked-list-ii/

解题思路:

1.找到需要翻转的开始节点,从开始节点其依次进行翻转,注意过程中要维护三个节点,curr,curr.next,curr.next.next

2.如果开始翻转节点为1,则返回翻转后链表的头,否则返回原始链表的头

题目解答:

/**
 * Definition for singly-linked list.
 * 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 null;
        }
        
        ListNode curr = head;
        ListNode firstTail = null;
        for(int i = 1;i<m;i++){
            firstTail = curr;
            curr = curr.next;
        }
        ListNode partTail = curr;
        ListNode next1 = curr.next;
        ListNode next2 = null;
        
        if(next1 != null){
            next2 = next1.next;
        }else{
            return head;
        }
        
        for(int i = m;i<n;i++){
            next1.next = curr;
            
            curr = next1;
            next1 = next2;
            if(next1 != null){
                next2 = next1.next;
            }else{
                break;
            }
        }
        
        partTail.next = next1;
        if(firstTail != null){
            firstTail.next = curr;
            return head;
        }else{
            return curr;
        }

    }
}

 

posted @ 2015-04-10 00:33  buptubuntu  阅读(104)  评论(0)    收藏  举报