首页 > 代码库 > ListNode Review ReverseListNode

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;    }    }

  

 

  

ListNode Review ReverseListNode