zoukankan      html  css  js  c++  java
  • 【LeetCode练习题】Reverse Linked List II

    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.

    题目意思:

    翻转给定区间[m,n]的链表。

    第一个节点m=1。  

    1<=m<=n<=length。

    解题思路:

    就我目前学习到的,有用指向指针的指针的,有插入,有逆转的。但是所有方法的核心,都其实是一个算法,就是利用3个指针修改区间内的节点的next值,且要保证已修改的链表是可以被找到的,即可以连入原链表中。

    假设有一个链表有1,2,3,4,5,6,6个节点。m=2,n=5。

    我们添加一个dummy节点,方便操作第一个节点。

    首先让pre指向第m个节点前面那个,cur指向第m个节点,p1指向m的下一个节点,因为p1有可能是NULL,所以当p1不是NULL的时候,p2指向p1的下一个节点。

    上图画出了这几个指针指向情况的开始状态和我们希望的终止状态。

    在最终状态下,再通过其中方框中的两步就可以我们需要的链表了。

    而cur,p1,p2三个指针在区间内向前移动并且将p1的next指向cur的过程则包含在一个for循环内部。如下:

    代码如下:

     1 class Solution {
     2 public:
     3     ListNode *reverseBetween(ListNode *head, int m, int n) {
     4         ListNode *dummy = new ListNode(0);
     5         dummy->next = head;
     6 
     7         ListNode *pre = dummy, *cur = head;
     8         for(int i = 1; i < m; i++){
     9             pre = cur;
    10             cur = cur->next;
    11         }
    12 
    13         ListNode *p1,*p2;
    14         if(cur)
    15             p1 = cur->next;
    16         if(p1)
    17             p2 = p1->next;
    18         for(int j = m; j < n; j++){
    19             p1->next = cur;
    20             cur = p1;
    21             p1 = p2;
    22             if(p2) p2 = p2->next;
    23         }
    24         pre->next->next = p1;
    25         pre->next = cur;
    26 
    27         return dummy->next;
    28     }
    29 };
  • 相关阅读:
    Centos7安装部署openstack--Keystone认证服务
    Centos7安装部署openstack----基础服务安装
    Centos7 k8s dns
    集中式存储3apr
    Centos7 k8s部署dahsboard
    Centos7 k8s tomcat-app项目持久化
    Centos7 k8s 容器的网络访问service
    Centos 7 k8s Deployment新副本控制器
    模型层中模型的基本了解
    程序员必知必会Git的小知识
  • 原文地址:https://www.cnblogs.com/4everlove/p/3651002.html
Copyright © 2011-2022 走看看