zoukankan      html  css  js  c++  java
  • 反转链表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;
        }
  • 相关阅读:
    Pandas
    多进程编程
    python的多线程编程
    Scrapy中集成selenium
    生成器函数yield和使用yield模拟协程
    迭代器和可迭代对象
    HDU5988 Coding Contest(浮点费用流)
    codeforces Technocup 2017
    codeforces724E Goods transportation(欧拉回路)
    UVAlive4097 Yungom(思路)
  • 原文地址:https://www.cnblogs.com/du001011/p/10640281.html
Copyright © 2011-2022 走看看