首页
学习
活动
专区
工具
TVP
发布

必会算法反转链表Ⅱ

##题目 上一篇文章咱们解决了如何反转整个链表的问题 那么如何反转一个链表的一部分节点呢?...(3节点) 第二部分链表的结尾节点(7节点) 第三部分链表的起始节点(8节点) ##算法图解 考虑到指定的反转范围可能是从第一个节点开始的 我们需要先定义一个“-1”节点 令“-1”节点的next...指向链表的起始节点 然后按照解题思路就能顺利解题了 结合“必会算法反转链表Ⅰ”中定义的节点,我们可以定义以下几个节点来标记关键节点 第一部分链表的起始节点:”-1“节点的next节点 第一部分链表的结尾节点...pointerEnd.next = pre; head.next = cur; return pointer.next; } 算法时间复杂度...O(end),end为要求反转范围的截止位置 算法空间复杂度O(1) 测试一下 public static void main(String[] args) { Node head =

40140
您找到你想要的搜索结果了吗?
是的
没有找到

必会算法反转链表Ⅰ

##题目 给定一个链表head,要求反转这个链表 链表节点定义如下 package com.dai.common; public class Node { public Integer value...可以采用整体法的思路 在第二种情况的基础上,将前两个节点看成一个整体,当作一个节点 此时pre还是指向的“第一个节点”,cur还是指向的第二个节点 那这样问题就简单了,还是采用第二种情况的方式反转链表就行了...依此类推 只需要搞定前两种情况 剩下的情况放到一个循环中做一样的处理就行 ##算法图解 如下图是一个拥有八个节点的链表 为了方便理解,我们cur.next也作为一个单独的指针定义出来 此时可以将...pre指向第一个节点 cur指向第二个节点 因为第一个节点在反转后是需要指向null的 所以此时pre.next=null 接着判断一下cur是否为null 不为null则需要将cur.next指向pre...同样的方法进行pre、cur、next指针的变动 只要cur或者next不为null,就可以一直走下去 直到最后,cur或者next为null 链表也反转完成了 pre指向的链表就是反转后的链表啦!

23120

算法反转单向链表(图解)

反转链表的公式都是一样的,主要分为以下四步: 将当前 head 引用的 next 引用传递给 nextNode 将当前 preNode 引用赋值给 head.next 实现反转(重要) 移动 preNode...指针,准备进行下一次反转 移动 head 指针,准备进行下一次反转 图解数据结构 上面代码和文字描述看上去可能不太直观,我们下面通过图文的形式展示一个单向链表是如何被反转的 单向链表的初始状态: ?...step 2 这里可以看到 head 引用的 next 指向已经发生的反转变化 ,这一步也是反转链表最重要的一步 后面第三步,第四步就是移动 preNode,head 指针,准备为下一次元素反转做准备了...head 同学临时占一个位置的,反转指针主要依靠 preNode 和 head,反转完成后如何: ?...打败 96% 的用户 总结 这道题非常简单,如果你是老手的话就当帮你回顾一下反转链表的解题思路,如果你是新手的话说不定能帮忙打开算法世界的大门,觉得文章不错的话,可以分享给朋友,最后再留一个问题,可以思考一下

44720

反转排序算法(Reverse Sort)

反转排序算法基本思想和案例】 反转排序:          反转排序的基本思想比较简单,也很好理解,其实现思路就是把数组最后一个元素和第一个元素替换,          倒数第二个元素与第二个元素替换...,直到把所有数组元素反转替换。...第二趟排序后    60    50       【30    40】       20    10          第三趟排序后    60    50    40    30    20    10 算法主要代码...j] = array[j] ^ array[i]; array[i] = array[i] ^ array[j]; } } 案例: package com.lemon.demo; /* * 【反转排序算法基本思想和案例...】 * 反转排序: * 反转排序的基本思想比较简单,也很好理解,其实现思路就是把数组最后一个元素和第一个元素替换, * 倒数第二个元素与第二个元素替换,直到把所有数组元素反转替换。

86220

算法篇:链表之反转链表

算法反转链表的基本操作可以拆分成下面四步: 1.保存前序节点, 2.保存后续节点, 3.当前节点指向前序节点 4.偏移前序节点和当前节点 其他的变形题目,主要围绕两个关键点: 1.反转之后的前序节点的处理...2.反转之后的后续节点的保存 题目1:反转链表 https://leetcode-cn.com/problems/reverse-linked-list/ ?...,second为反转之后的后续节点, // 对于要反转的链表来说,second也是头节点的前序节点 h1 = reverseList(first,second) if begin...next指向反转之后的链表,2nd.Next指向1st作反转处理 func swapPairs(head *ListNode) *ListNode { if head == nil || head.Next...(end,k) return node } // 一个链表的反转,node表示反转之后的头节点 func reverseList(head *ListNode, node *ListNode)

28710

☆打卡算法☆LeetCode 206. 反转链表 算法解析

一、题目 1、算法题目 “给定单链表的头结点,返回反转后的链表。” 题目链接: 来源:力扣(LeetCode) 链接: 206....反转链表 - 力扣(LeetCode) 2、题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。...示例 1: 输入: head = [1,2,3,4,5] 输出: [5,4,3,2,1] 示例 2: 输入: head = [1,2] 输出: [2,1] 二、解题 1、思路分析 题意要反转链表,返回反转后的链表...只需要遍历整个链表,然后将当前节点改为指向前一个节点,遍历操作结束就完成了反转。 其中有一个问题,由于节点没有引用前一个节点,需要先存储前一个节点。...2、每次让 prepre 的 nextnext 指向 curcur ,实现一次局部反转 3、局部反转完成之后,prepre 和 curcur 同时往前移动一个位置 4、循环上述过程,直至 prepre

15720
领券