zoukankan      html  css  js  c++  java
  • 61. Rotate List

    一、题目

      1、审题

      

      2、分析

        给出一个链表,一个参数 k,将链表的后边 k 个节点移动到左边来。(其中 k 可能大于链表长度)

    二、解答

      1、思路:

        ①、获得链表长度 total ,同时记录末尾节点 endNode。则 k = k % total 即为需要移动的后边部分的节点数,则 leftStep = total - k 即为前边不需要动的节点数。

        ②、将原链表第 leftStep+1 个节点成为新链表的头结点,即 第 leftStep.next = null;

        ③、原末尾节点 endNode 拼接到原来的头结点。

    public ListNode rotateRight(ListNode head, int k) {
            
            if(head == null || head.next == null || k == 0)    // 不需要移动
                return head;
            
            int total = 1;
            ListNode endNode = head;    
            while(endNode.next != null) {
                total++;
                endNode = endNode.next;    // 记录末尾一个节点
            }
            
            k = k % total;
            if(k == 0)        // 不需要移动
                return head;
            
            int leftStep = total - k;
            ListNode tmpNode = head; 
            for(int i = 1; i < leftStep; i++) 
                tmpNode = tmpNode.next;
            ListNode newHead = tmpNode.next;  
            tmpNode.next = null; // 新的末尾节点
            endNode.next = head;    // 拼接 
            
            return newHead;
        }

          

  • 相关阅读:
    为什么需要多重继承?它的优缺点是什么?
    delete
    链表环状检测主要有三种方法
    常见和链表相关的算法
    二分查找算法
    找出两个字符串中最长的相同子字符串
    链表创建打印删除
    python项目
    hadoop博客 oschina
    用shell写个100以内的所有数字之和
  • 原文地址:https://www.cnblogs.com/skillking/p/9675844.html
Copyright © 2011-2022 走看看