首页 > 其他分享 >BM2 链表内指定区间反转

BM2 链表内指定区间反转

时间:2023-01-31 12:44:57浏览次数:46  
标签:BM2 head ListNode cur int 反转 Next 链表 节点

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c?tpId=295&tqId=654&ru=%2Fpractice%2F1291064f4d5d4bdeaefbf0dd47d78541&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

Go

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n)O(n),空间复杂度 O(1)O(1)O(1)。

先记录四个关键位置(m前面的节点,m节点,n节点,n后面的节点),再进行反转处理。

边界情况:

m=n 不需要反转,直接返回

m是第一个节点会改变头节点,引入一个新的头节点消除这种特殊情况

package main import . "nc_tools" /* * type ListNode struct{ * Val int * Next *ListNode * } */
/** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ func reverseBetween( head *ListNode , m int , n int ) *ListNode { // write code here if m == n{ return head } hpre := new(ListNode) hpre.Next = head
var hcpre, mpre,mcur,ncur,nnext *ListNode hc := head hcpre = hpre //遍历到n for i:=1;i<n;i++{ if i == m{ mcur = hc mpre = hcpre } hcpre = hc hc = hc.Next } ncur = hc nnext = hc.Next
//开始反转 mpre.Next = ncur
pre := mcur cur:= mcur.Next for cur != nnext{ curnext := cur.Next cur.Next = pre pre = cur cur = curnext } mcur.Next = nnext return hpre.Next
} 运行时间 4ms   占用内存 1192KB

标签:BM2,head,ListNode,cur,int,反转,Next,链表,节点
From: https://www.cnblogs.com/starter-songudi/p/17078601.html

相关文章

  • 剑指 Offer 06. 从尾到头打印链表
    题目:思路:【1】本质上,递归,辅助栈都是可以实现的方法,但是相比于递归,如果能用循环解决的话我更喜欢循环,因为递归也是需要消耗内存空间的,而且本质上其实只需要知道链表大小......
  • BM25 二叉树的后序遍历
    https://www.nowcoder.com/practice/1291064f4d5d4bdeaefbf0dd47d78541?tpId=295&tqId=2291301&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2......
  • 反转字符串
    /***反转字符串*/constreverseString=(str='helloworld')=>{constarr=str.split('')letstartIndex=0,endIndex=arr.lengthwhile(s......
  • 双向链表
    双向链表单链表查找某结点的后继结点的执行时间为O(1);单链表查找某结点的后继结点的执行时间为O(n)在单链表的每个结点里再增加一个指向其直接前驱的指针域prior,这样链......
  • LeetCode 删除链表的倒数第 N 个结点(/)
    原题解题目给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。约束题解方法一classSolution{public:intgetLength(ListNode*head){......
  • Redis的设计与实现(2)-链表
    链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表:当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用......
  • 单链表的倒数第 k 个节点
    /***单链表的倒数第k个节点*/constlinkList={value:1,next:{value:2,next:{value:3,next:{......
  • 单向链表利用快慢指针
    /***单链表的中点*/constmiddleNode=(node=linkList)=>{letslow=node,fast=node;while(fast&&fast.next){slow=slow.next......
  • 循环链表
    循环链表一种头尾相接的链表,表中最后一个结点的指针域指向头结点,整个链表形成一个环即没有NULL指针,因此遍历操作时,终止条件是否等于头指针优:从表中任一结点出发,均可找到......
  • 1669. 合并两个链表
    1669.合并两个链表題解:模拟链表操作/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode......