• 反转链表II(根据指定的索引,逆转链表)


    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转

    思想:首先判断链表是否合法,并且判断输入的m和n是否合法

    定义dummyHead结点,让它指向头结点的前驱,再定义cur,让它指向dummyHead,找到m位置的前驱结点,让cur指向它,接下来的操作和链表逆序一样,只不过只进行n-m次。

    代码如下:

    public ListNode reverseBetween(ListNode head, int m, int n) {
            //链表长度
            int length = getLength(head);
            int t = n - m;
            //判断链表是否合法,并且m和n是否合法
            if(length<n || m>=n || head == null || head.next == null) return head;
            //定义头结点的前驱结点
            ListNode dummyHead = new ListNode(-1);
            dummyHead.next = head;
            //定义临时结点,指向dummyHead
            ListNode cur = dummyHead;
            //让cur指向m位置结点的前驱结点
            while(m>1){
                cur = cur.next;
                m--;
            }
            //逆转链表n-m次
            ListNode f = cur.next;
            ListNode s = f.next;
            while(s!=null && t>0){
                f.next = s.next;
                s.next = cur.next;
                cur.next = s;
                s = f.next;
                t--;
            }
            //返回
            return dummyHead.next;
        }
        //求链表长度
        public static int getLength(ListNode head){
            int count = 0;
            while(head!=null){
                head = head.next;
                count++;
            }
            return count;
        }
  • 相关阅读:
    2017 业余程序员的回顾
    而立将近,可有不惑
    谈谈转行
    吃干抹净提上裤子就甩
    Autosizer应用程序窗口控制工具
    AutoCAD2007专业版
    Revit中如何添加水平仰视平面视图
    Revit中绘制带坡度管道
    Revit自定义快递访问工具栏
    Revit利用对正工具快速修改风管对齐方式
  • 原文地址:https://www.cnblogs.com/du001011/p/10640281.html
Copyright © 2020-2023  润新知