美文网首页
Leetcode系列之链表(5)

Leetcode系列之链表(5)

作者: FisherTige_f2ef | 来源:发表于2019-10-18 18:09 被阅读0次

题目5:

将一个链表m位置到n位置之间的区间反转,要求使用原地算法,并且在一次扫描之内完成反转。

例如:

给出的链表为1->2->3->4->5->NULL, m = 2 ,n = 4,

返回1->4->3->2->5->NULL.

注意:

给出的m,n满足以下条件:

1 ≤ m ≤ n ≤ 链表长度

思路:

1.先考虑普通的整条链表的翻转(链表翻转)

明确基本数据类型与引用数据类型的区别(请牢记一个链表中的一个节点模型:入口地址,对象,下一个地址)

ListNode t=head.next这种写法改变的是地址并不是拷贝整个对象,如图的模型

利用一个中间变量节点,逐个翻转地址(记住,是地址,操作和变换的都是:入口地址和下一个的地址)

2.考虑截取m到n时翻转的不同

m节点不是原链表的头时,m节点的入口不用置null

n节点不是原链表末尾时,要接上在原链表的位置

代码:

/**

* Definition for singly-linked list.

* public class ListNode {

*    int val;

*    ListNode next;

*    ListNode(int x) {

*        val = x;

*        next = null;

*    }

* }

*/

public class Solution {

    public ListNode reverseBetween(ListNode head, int m, int n) {

        ListNode orignalPre = new ListNode(0);

        orignalPre.next = head;

        ListNode pre = orignalPre;

        for (int i = 0; i < m - 1; i++) {

            pre = pre.next;

        }

        ListNode cur = pre.next;

        for (int i = m; i < n; i++) {

            ListNode t = cur.next;

            cur.next = t.next;

            t.next = pre.next;

            pre.next = t;

        }

        return orignalPre.next;

    }

}

相关文章

  • Leetcode系列之链表(5)

    题目5: 将一个链表m位置到n位置之间的区间反转,要求使用原地算法,并且在一次扫描之内完成反转。 例如: 给出的链...

  • Swap Nodes in Pairs

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Swap Nodes in ...

  • Remove Nth Node From End of List

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Remove Nth Nod...

  • Merge k Sorted Lists

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Merge Two Sort...

  • Leetcode系列之链表(16)

    题目: 有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+...

  • Leetcode系列之链表(14)

    题目: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5...

  • Leetcode系列之链表(15)

    题目: 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数...

  • Leetcode系列之链表(13)

    题目: 合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。 思路: 典型的多路归并问题 代码...

  • Leetcode系列之链表(9)

    题目: 将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的 思路: 普通的排序问题,难...

  • Leetcode系列之链表(10)

    题目: 将给定的链表向右转动k个位置,k是非负数。 例如: 给定1->2->3->4->5->null , k=2...

网友评论

      本文标题:Leetcode系列之链表(5)

      本文链接:https://www.haomeiwen.com/subject/qtfimctx.html