`
Thomas会Coding
  • 浏览: 96769 次
  • 性别: 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`指针,直到遍历完整个链表。 项目的实现细节可能包含异常处理,如确保插入和删除操作时不会超出链表范围,或者在空...

    前端大厂最新面试题-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→...

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

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

    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个一组进行反转。 解决这些题目...

    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; ...

    一个示例代码,演示了如何在PTA中实现逆序数据建立链表的过程

    一个示例代码,演示了如何在PTA中实现逆序数据建立链表的过程。...调用 build_reverse_linked_list 函数构建逆序链表。 最后调用 print_linked_list 函数打印链表元素。 示例输入输出: 假设输入为: 5 1 2 3 4 5

    C语言链表定义及其基本操作

    ### C语言链表定义及其基本操作 #### 链表定义 链表是一种常见的线性数据结构,由一系列结点组成。每个结点包括两个部分: - 数据域:用于存储实际的数据元素。 - 指针域:用于存储指向下一个结点的地址。 在C语言...

    链正向链表、反向链表.rar

    链表的其他变种还包括双向链表(Doubly Linked List),它同时具有前驱和后继指针,允许双向遍历,提高了数据访问的灵活性。还有循环链表(Circular LinkedList),其中最后一个节点的指针会指向头节点,形成一个...

    pythonDoublyLinkedList:Python中的双链表

    class DoublyLinkedList: def __init__(self): self.head = None self.tail = None # 插入节点 def insert(self, data, index=None): # ... 实现插入逻辑 ... # 删除节点 def remove(self, value): # ......

Global site tag (gtag.js) - Google Analytics