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

    1. Reverse Linked List II My Submissions QuestionEditorial Solution
      Total Accepted: 70579 Total Submissions: 252986 Difficulty: Medium
      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.
    思路:
    时间复杂度:O(n),空间复杂度O(1)
    找到指定段元素,对该段元素逆转,同时保留指定段的两端的邻居

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* reverseBetween(ListNode* head, int m, int n) {
                assert(n>=m);
                if(m==n)return head;
                int i=1,j=1;
                ListNode *p=head,*q=head,*prep=NULL;//保留指定段首元素的前一元素
                while(p!=NULL&&i++<m){
                    if(i==m)prep=p;
                    p=p->next;
                }
                while(q!=NULL&&j++<n)q=q->next;/找到各自的最终位置,越界为空
                if(p==NULL)return head;       //起始位置越界,直接返回head
                ListNode * tmp = p->next,*prenode = p,*qnext=q->next;
                while(tmp!=qnext)         //还未到达指定段的下一元素,则当前元素指向前一元素
                {  
                    ListNode *nextnode = tmp->next;
                    tmp->next = prenode;
                    prenode = tmp;
                    tmp = nextnode;
                 }
                 p->next = qnext;
                 if(prep!=NULL)prep->next = prenode;
                 else head = prenode;
                 return head;
            }
    };
  • 相关阅读:
    L6循环神经网络
    L5语言模型与数据集
    L4文本预处理
    L2 Softmax与分类模型
    L3 多层感知机
    L1线性回归
    P4语法(4)Control block
    机器学习笔记(4)Logistic回归
    [CF] Sasha and One More Name
    机器学习笔记(3)多变量线性回归
  • 原文地址:https://www.cnblogs.com/freeopen/p/5482917.html
Copyright © 2011-2022 走看看