zoukankan      html  css  js  c++  java
  • 翻转链表2

    此博客链接:

    翻转链表2

    题目链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/

    题目

    给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
     

    示例 1:


    输入:head = [1,2,3,4,5], left = 2, right = 4
    输出:[1,4,3,2,5]
    示例 2:

    输入:head = [5], left = 1, right = 1
    输出:[5]

    题解

    我一开始想着把链表分为3部分,第一部分是开头不需要翻转的链表,第二部分是需要翻转的部分,把需要翻转的部分使用头插法翻转链表,第三部分是不需要翻转的部分,然后把三部分最后链接在一起,但是当最后一部分链接时,是没有办法链接的,因为中间部分经过头插法翻转链表后,指针是一直指向最前面,不会在指向最后,所以没有办法和第三部分链接。

    后来看了题解,原来使用头插法是没有问题的,只是不需要把链表分为三个部分,而是在不需要翻转的部分使用头插法,每次都是把需要翻转的插到第一个需要翻转的元素后面。

    代码

    class Solution {
        public ListNode reverseBetween(ListNode head, int left, int right) {
            ListNode p=head;
            ListNode q=head;
            while(q!=null){
                 if(q.next.val==left)
                {
                    p=q;
                    q=q.next;
                    break;
                }
            }
            while(p.next.val!=right)
            {
                ListNode t=q.next;
                p.next=t;
                q.next=t.next;
                t.next=q;
                // System.out.println(head);
            }
            return head;
        }
    }

    结果

    但是吧,奈何我的程序还是结果不对。

    出来混总是要还的
  • 相关阅读:
    EasyUI限制时间选择(开始时间小于结束时间)
    C# readonly与const的区别
    C# Lambda 表达式
    C# 扩展方法
    C# 枚举enum
    Visual Studio中的“build”、“rebuild”、“clean”的区别
    无root开热点教程
    数据库锁
    安卓:标题栏右上角添加按钮
    安卓:从assets目录下复制文件到指定目录
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14813009.html
Copyright © 2011-2022 走看看