首页 > 其他分享 >LeetCode92 反转链表

LeetCode92 反转链表

时间:2022-10-03 23:22:54浏览次数:79  
标签:head ListNode int 反转 LeetCode92 nullptr next 链表 top

 

idea:参考上一道全部反转,所以反转链表部分代码实现,我觉得重点在于集中不同情况的分类讨论。一共四类情况需要考虑,有前有后,有前无后,有后无前,无前无后。

 

/**  * Definition for singly-linked list.  * struct ListNode {  *     int val;  *     ListNode *next;  *     ListNode() : val(0), next(nullptr) {}  *     ListNode(int x) : val(x), next(nullptr) {}  *     ListNode(int x, ListNode *next) : val(x), next(next) {}  * };  */ class Solution { public:     ListNode* reverseBetween(ListNode* head, int left, int right) {         ListNode* p=head, *q=nullptr, *m=nullptr;    //三个指针实现反转任务         ListNode* top=head;      //top在有前的情况下记录“前指针”         int i=1;         while(p!=nullptr){      //传入有效链表             if(i==left-1){                 top=head;             }             if(i==left)                 q=head;             if(i>left && i<right+1){    //注意反转是从left+1项开始                 m=head;                 head=head->next;                 m->next=q;                 q=m;                 i++;                 continue;             }             if(i==right && head->next==nullptr){    //无后情况,分有前和无前                 if(left==1){                     return q;                 }                 else{                     top->next->next=nullptr;                     top->next=q;                     return p;                 }             }             if(i==right+1){      //有后情况,分有前和无前                 if(left>1){                     top->next->next=head;                     top->next=q;                     return p;                 }                 else{                     top->next=head;                     return q;                 }             }             head=head->next;             i++;         }         return nullptr;     } };   复杂度: 时间复杂度应该为O(n) 空间复杂度:应该为O(4)    

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:head,ListNode,int,反转,LeetCode92,nullptr,next,链表,top
From: https://www.cnblogs.com/Ting-LOVE/p/16751563.html

相关文章

  • IOC控制反转
    一、IOC概念IOC(InversionofControl):控制反转,是个理论和指导思想,旨在将原来需要开发人员手动声明的Java对象,反转为由Spring(容器)统一控制管理。1、控制反转控制......
  • 复制带随机指针的链表
    复制带随机指针的链表作者:Grey原文地址:博客园:复制带随机指针的链表CSDN:复制带随机指针的链表题目描述一种特殊的单链表节点类描述如下classNode{intval;......
  • LeetCode 75 突破:环形链表 II
    LeetCode75学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level1和Level2学习计划是为初级用户和中级用户......
  • LeetCode142 环形链表
       idea:对于有环结构的链表,判断环结点位置,开始想到遍历链表,直到某一个结点出现第二遍,所以要进行比对的过程,想到前面学到利用哈希表解决相交链表,可以在这使用。不过......
  • 1110 区块反转——25分
    给定一个单链表L,我们将每K个结点看成一个区块(链表最后若不足K个结点,也看成一个区块),请编写程序将L中所有区块的链接反转。例如:给定L为1→2→3→4→5→6→7→8,K为......
  • 1105 链表合并——25分
    给定两个单链表L1=a1→a2→⋯→an−1→an和L2=b1→b2→⋯→bm−1→bm。如果n≥2m,你的任务是将⽐较短的那个链表逆序,然后将之并⼊⽐较⻓的那个链表,得到⼀个形如a1→a2......
  • 代码随想录day8 ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空
    344.反转字符串1classSolution{2public:3voidreverseString(vector<char>&s){4for(inti=0,j=s.size()-1;i<s.size()/2;i++......
  • LeetCode86 分隔链表
     idea:烦死了,这个题一直因为创立的指针为空,或者接入结点方法不对,结果将两个小链表搞混乱了,不过具体思路ok。将小值结点成一组,大值结点成一组,最后在首尾相连,实现起来也比......
  • LeetCode21 合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 (注意给出的三个实例,第一次由于没有注意到另外两个实例,忘记考虑一......
  • Java中队列和链表性能对比-ArrayList和LinkedList
    本文使用ArrayList和LinkedList,分别对比了队列链表的add,get的性能。 具体代码如下,可以直接运行importjava.util.ArrayList;importjava.util.LinkedList;importja......