`
Thomas会Coding
  • 浏览: 98460 次
  • 性别: 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
分享到:
评论

相关推荐

    danlianbiao.rar_Linked list_链表

    `Reverse`方法则需要两个指针,一个记录当前节点,另一个记录前一个节点,依次交换节点的`Next`指针,直到遍历完整个链表。 项目的实现细节可能包含异常处理,如确保插入和删除操作时不会超出链表范围,或者在空...

    c语言-leetcode题解之0092-reverse-linked-list-ii.zip

    题号0092的题目是“Reverse Linked List II”,也就是“反转链表II”,这是一个涉及到链表操作的算法题目。在C语言中,解决这个问题需要对链表的节点进行翻转,并且要注意反转的范围是从第m个节点到第n个节点。这道...

    前端大厂最新面试题-linked-list.docx

    2. 反转链表(Reverse Linked List) 反转链表是将链表的方向反转,即将链表的头节点变为尾节点,尾节点变为头节点。这种操作可以用于解决一些特殊的问题,例如,反转链表以满足某些算法的要求。 知识点:反转链表...

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

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

    linked-list-reverse-output.rar_Reverse Linked List

    总的来说,单链表的逆序输出是一个很好的练习,可以帮助我们加深对数据结构和算法的理解,特别是对于链表操作和指针操作的掌握。在实际的软件开发中,熟练掌握这类基础操作可以提升代码的效率和质量。

    陈越、何钦铭-数据结构作业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→...

    js-leetcode题解之92-reverse-linked-list-ii.js

    JavaScript解题之92号问题:反转链表II 在JavaScript中,反转链表是一个常见的算法题。特别是在LeetCode平台上,问题编号92的反转链表II是链表题目中的一个经典案例。这道题要求我们只对链表中的一部分进行反转,而...

    java-leetcode题解之206-Reverse-Linked-List

    Java LeetCode题解之206-Reverse-Linked-List是指在Java编程语言中对LeetCode上的第206号题目“反转链表”进行解答的过程。这是一个经典的算法与数据结构问题,通常作为算法入门的练习题,用于练习对链表这种数据...

    leetcode-链表笔记

    Linked List Cycle II**:找到链表环的长度,并给出进入环的第一个节点。 4. **解决链表问题的策略** - **迭代法**:使用循环遍历链表,通常适用于大多数链表操作。 - **递归法**:对于某些特定问题,如链表反转...

    链表操作(创建、排序、插入、逆序递归)

    ### 链表操作(创建、排序、插入、逆序递归) 在计算机科学中,链表是一种常用的数据结构,它由一系列节点组成,每个节点包含数据和其他节点的链接。链表的操作通常包括创建、排序、插入等。下面将详细介绍这些操作在...

    java-leetcode题解之第92题反转链表II.zip

    第92题“反转链表II”(Reverse Linked List II)要求对链表的一部分进行反转。具体来说,给定一个链表的头节点`head`、一个整数`m`和一个整数`n`,你需要反转从位置`m`到位置`n`的链表部分,其中位置`1`为链表的...

    Leetcode 反转链表.js

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

    数据结构 双向链表(C++)

    DoublyLinkedList() : head(nullptr), tail(nullptr) {} // 插入节点 void insert(int value, Node* prevNode); // 删除节点 void remove(Node* node); // 遍历链表 void traverse(); // 反转链表 void...

    C 双向链表的所有基本操作.zip

    在计算机科学中,双向链表(Double-Linked List)是一种数据结构,它允许在列表中的元素之间进行前向和后向导航。与单链表不同,双向链表的每个节点包含两个指针,一个指向其前一个节点,另一个指向其后一个节点。...

    VC 单向/双向链表模板类实例二则.rar

    VC中的双向链表模板类`DoublyLinkedList&lt;T&gt;`可能包含以下结构: 1. **节点定义**:与单向链表类似,但需要增加一个指向前一个节点的指针,如`ListNode* prev`。 2. **链表类定义**:除了单向链表的基本方法外,还会...

    算法链表.docx

    本文将深入探讨链表的几个关键操作:链表反转、合并有序列表、新增节点、删除节点、判断链表是否有环以及找到链表的中间节点。我们将使用Java语言进行讨论。 首先,链表不同于数组,它不依赖于内存中的连续空间。每...

    算法面试通关40讲完整课件 05-07 数组、链表

    4. 链表环检测 II(Linked List Cycle II, 如LeetCode的第142题):找到链表环内的起点。 5. K 个一组翻转链表(Reverse Nodes in K-Group, 如LeetCode的第25题):将链表中的节点每K个一组进行反转。 解决这些题目...

    C++-leetcode题解之206-Reverse-Linked-List.cpp

    基本的思路是用三个指针来操作:一个是当前节点(current)、一个是指向当前节点的前一个节点(prev)、另一个是临时节点(temp),用于暂存当前节点的下一个节点,防止遍历过程中失去对链表其余部分的链接。 具体步骤...

    python-leetcode题解之206-Reverse-Linked-List.py

    该问题在数据结构和算法学习中占有重要地位,它不仅是一个面试中常见的题目,更是考察候选人对链表操作理解和掌握程度的一个重要方式。 首先,我们得了解单链表的基本概念。在单链表中,每个节点由数据和指向下一个...

    JAVA双向链表反转实现

    public class DoublyLinkedList { private Node head; private Node tail; // 添加节点到链表尾部 public void addNode(int data) { Node newNode = new Node(data); if (head == null) { head = newNode; ...

Global site tag (gtag.js) - Google Analytics