`
Thomas会Coding
  • 浏览: 93100 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

 这一题的主要就是链表的逆序,逆序比较好的解法有前插,利用栈,这里我们使用前插的方式解决

先看代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if(head==null||m==n)
            return head;
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        ListNode mPre=dummy;
        ListNode mNode=head;
        int i=1;
        while(i<m){
            mPre=mPre.next;
            mNode=mNode.next;
            i++;
        }
        while(i<n){//前插
            ListNode temp=mPre.next;
            mPre.next=mNode.next;
            mNode.next=mNode.next.next;
            mPre.next.next=temp;
            i++;
        }
        return dummy.next;
    }
}

 首先需要找到m节点和m节点的前节点。

找到m节点和其前节点后我们就可以进行前插了。

ListNode temp=mPre.next;//现将mPre的后面一个节点保存起来。插入的时候就是讲其他节点插入mPre和mPre后面一个节点之间,所以要保存mPre的后一个节点

 

mPre.next=mNode.next;//mNode.next指向要插入的节点。将此节点作为mPre的next节点

 

mNode.next=mNode.next.next;//mNode的next指针指向他的下下个节点

 

mPre.next.next=temp;//将插入节点的next指针指向我们之前保存的节点。完成节点的插入

 

 

0
1
分享到:
评论

相关推荐

    fuxuemingzhu#Leetcode-Solution-All#92. Reverse Linked List II 反转

    进行一次遍历,把第m到n个元素进行翻转,即依次插入到第m个节点的头部。这个题还是有意思的。建议后面再多做几遍。Python代码如下:self.next = No

    陈越、何钦铭-数据结构作业6:Reversing Linked List链表翻转

    Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→...

    C#,递归方法实现双向链表(Doubly Linked List)的反转(Reverse)算法与源代码

    C#,递归方法实现双向链表(Doubly Linked List)的反转(Reverse)算法与源代码 递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的...

    Leetcode 反转链表.js

    LeetCode 206的题目是“反转链表”(Reverse Linked List),它要求将一个单链表的所有节点反转,并返回反转后链表的头节点。这是一个基础但非常重要的链表操作问题,它不仅考察了对链表数据结构的理解,还涉及到了...

    leetcode2sumc-LeetCode:LeetCode的一些题目

    List(链表) ID Difficulty Title Java Python 21 Easy Merge Two Sorted Lists 83 Easy Remove Duplicates from Sorted List 141 Easy Linked List Cycle 160 Easy Intersection of Two Linked Lists 203 Easy ...

    python链表逆置代码

    链表逆置 定义了一个简单的链表节点类 `ListNode`,然后实现了 `reverse_linked_list` 函数来逆置链表。最后,创建一个简单的链表并在逆置之前和之后打印链表的值,以验证逆置操作。

    leetcode中325题python-leetcode:leetcode

    reverse-linked-list-ii(Reverse a Sub-list) 141 环形链表 linked-list-cycle 142 环形链表 II linked-list-cycle-ii 143 重排链表 reorder-list 148 排序链表 sort-list 234 回文链表 palindrome-linked-list 双...

    单链表双向链表ADT_C语言项目

    Singly Linked List: 1. DestroyList 2. InsertList 3. DeleteList 4. TraverseList 5. SearchList 6. ReverseList 7. IsLoopList 8. ReverseEvenList 9. FindMidNode Double Linked List: 1. ...

    leetcode中文版-LeetCode:力码

    第一部分(链表): LeetCode 21.Merge Two Sorted Lists LeetCode 23.Merge k Sorted Lists(solve1) LeetCode 23.Merge k Sorted Lists(solve2) LeetCode 86.Partition List LeetCode 92.Reverse Linked List II ...

    Reverse-A-Linked-List:动画蛇游戏,可视化反转链表的算法

    关于 这个项目包含了一个蛇游戏,但是有点扭曲。 在这里,我已经实现了反向链接算法,并且可以类似地用于可视化相同的算法。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行该应用程序。...

    LeetCode:LeetCode解决方案

    preorder-traversal链表reorder-list链表linked-list-cycle-ii链表linked-list-cycle动态规划word-break-ii动态规划word-break链表copy-list-with-random-pointer复杂度single-number-ii复杂度single-number动态规划

    leetcode分发糖果-ForDaFactory:使用C++的个人leetcode解决方案

    92-反转链表II:reverse-linked-listt-ii 141-环形链表:linked-list-cycle 142-环形链表:linked-list-cycle-ii 160-相交链表:intersection-of-two-linked-lists 206-反转一个单链表:reverse-linked-list 20-有效的...

    gasstationleetcode-leetcode-in-niuke:在牛客网上的在线编程中的leetcode在线编程题解

    linked-list-cycle-ii 链表 linked-list-cycle 链表 copy-list-with-random-pointer 复杂度 single-number 动态规划 candy 贪心 gas-station 动态规划 palindrome-partitioning-ii 动态规划 triangle 树 sum-root-to...

    leetcode跳跃-LeetCode:力扣刷题70道!

    Reverse Linked List 队列 Queue 力扣 933 最近的请求次数 | Number of Recent Calls 力扣 225 用队列实现栈 | Implement Stack Using Queue 力扣 622 设计循环队列 | Design Circular Queue 力扣 641 设计循环双端...

    tech.github.io:我的博客

    终生成长 :hot_beverage: 为什么要建这个仓库 梳理自己掌握的知识点,整理自己的知识体系。... Reverse Linked ListLeetcode 141. Linked List CycleLeetcode 21. Merge Two Sorted ListsLeetCode 224. Basic Cal

    数据结构之线性表及其应用

    给顺序表和链表的实现分别使用添加成员函数以及对象的应用两种方法实现线性表中元素的逆置(reverse)和单个元素移动到特定位置的操作(move)。 编写一个函数,用于合并两个顺序表。输入的顺序表按照其元素从小到大排序...

    Python实现数据结构与算法——反转链表

    链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路: 思路1:迭代 假设有链表1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;None, 反转后得None&lt;-...

    如何有效率的刷leetcode-LeetCodeLearn:力码学习

    List链表 栈 队列 Tree数 遍历、排序 分治 动态规划 2.链表 递归的模板: public ListNode reverseList(参数0) { if (终止条件) return; 逻辑处理(可能有,也可能没有,具体问题具体分析) //递归调用 ListNode ...

    leetcode备忘录系统-Algorithms-DataStructures:算法-数据结构

    leetcode备忘录系统算法-数据结构 ...位操作练习 - Working with bit maps - Bit shifting 递归、回溯和记忆 - Reverse a number - Pow (x,n) - Fibonacci - Merge 2 sorted lists - Reverse linked list - Sear

    《剑指Offer》刷题笔记——面试题24. 反转链表

    # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None from collections import deque class Solution: def reverseList(self, head: ListNode) -...

Global site tag (gtag.js) - Google Analytics