zoukankan      html  css  js  c++  java
  • [leedcode 92] 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.

    /**
     * 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) {
            /*The idea is stright forward. There needs an safe head guard.
    
            1 calculate the number that needs to reverse 
    
            2 find the start position to reverse.
    
            3. iterative reverse two node(Use two pointer)*/
            ListNode newHead=new ListNode(-1);//安全头节点
            newHead.next=head;
            ListNode p1=head;
            ListNode last=newHead;
            int t=n-m;
            while(m>1){
                p1=p1.next;
                last=last.next;
                m--;
            }
            ListNode rear=last;
            ListNode temp=p1;
                p1=p1.next;
                last=last.next;
            ListNode p2=p1;
            
            while(t>0){
                p2=p1.next;
                p1.next=last;
                last=p1;
                p1=p2;
                t--;
            }
            rear.next=last;
            temp.next=p1;
            return newHead.next;
        }
    }
  • 相关阅读:
    redis分布式锁原理
    设置linux源
    linux 设置固定ip 并且解决ping www.baidu.com不通问题
    java内存模型
    Messenger和MVVM中的View Services
    MVVMLight
    MVVMLight
    MvvmLight
    MVVM 事件转命令1
    Mvvm简介
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4651564.html
Copyright © 2011-2022 走看看