ListNode Review ReverseListNode

             iterative: Core code

if(head == null || head.next == null)
     return head; 
ListNode current =  head.next;
head.next = null;
while(current ! = null){
     ListNode temp = current.next;
     current.next = head;
     head = current;
    current = temp.next;
}
return head;

        recurring : Core code

    public ListNode reverseList(ListNode head) {
         if(head == null || head.next == null)
            return head;
         ListNode second = head.next;
         head.next = null;
         ListNode res =  reverseList(second);
         second.next  = head;
         return res;
    }

  

Reverse Linked List II     

  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.

   

 two point: reverse

/**
 * 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(head == null || head.next == null)
            return head;
        ListNode res = new ListNode(-1);
        res.next = head;
        ListNode pre = res;
        for(int i = 0; i < m - 1 ; i ++){
            pre = pre.next;
        }
        ListNode first = pre.next;
        ListNode second = first.next;
        for(int i = 0; i < n - m ; i++){
            first.next = second.next;
            second.next = pre.next;
            pre.next = second;
            second = first.next;
        }
        return res.next;
    }
    
}

  

  

原文地址:https://www.cnblogs.com/joannacode/p/5863418.html