zoukankan      html  css  js  c++  java
  • Reverse Linked List II leetcode java

    题目

    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->NULL, m = 2 and n = 4,

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

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

    题解

     经典的题目就是链表逆序啦,一般的链表逆序是让把链表从前到后都逆序,这个是给定了起始位置和结束位置,方法是一样的。

     就是维护3个指针,startpoint,node1和node2。

     startpoint永远指向需要开始reverse的点的前一个位置。

     node1指向正序中第一个需要rever的node,node2指向正序中第二个需要reverse的node。

     交换后,node1 在后,node2在前。这样整个链表就逆序好了。

    代码如下:

     1     public ListNode reverseBetween(ListNode head, int m, int n) {
     2         ListNode newhead = new ListNode(-1);
     3         newhead.next = head;
     4         
     5         if(head==null||head.next==null)
     6             return newhead.next;
     7             
     8         ListNode startpoint = newhead;//startpoint指向需要开始reverse的前一个
     9         ListNode node1 = null;//需要reverse到后面去的节点
    10         ListNode node2 = null;//需要reverse到前面去的节点
    11         
    12         for (int i = 0; i < n; i++) {
    13             if (i < m-1){
    14                 startpoint = startpoint.next;//找真正的startpoint
    15             } else if (i == m-1) {//开始第一轮
    16                 node1 = startpoint.next;
    17                 node2 = node1.next;
    18             }else {
    19                 node1.next = node2.next;//node1交换到node2的后面
    20                 node2.next = startpoint.next;//node2交换到最开始
    21                 startpoint.next = node2;//node2作为新的点
    22                 node2 = node1.next;//node2回归到node1的下一个,继续遍历
    23             }
    24         }
    25         return newhead.next;
    26     }

  • 相关阅读:
    a-b(高精度)
    a+b(高精度)[陈涛]——c语言
    |-病毒集锦-|(!长期更新!)
    2016/7/7 二分警察(搜查)~#递归打法好!
    2016/7/7 自定义函数copy
    2015/7/6 (!长期更新!)C语言从零——张呵呵
    2016/7/6 高精准计算器-减(神·高精准)
    2016/7/6 神·CPU的人类极限在哪?
    2016/7/6 真·高精度计算器-加 (火速跟完!!!)
    2016/7/6 准·高精度计算器-加
  • 原文地址:https://www.cnblogs.com/springfor/p/3864303.html
Copyright © 2011-2022 走看看