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;
        }

          

  • 相关阅读:
    ASP.NET面试题(二)
    iBatis.Net系列(四) iBatisNet API基础
    ibatisnet系列(一) 总览
    iBatisnet系列(二) 配置运行环境和日志处理
    HDU 1575 Tr A (矩阵乘法)
    HDU 连连看
    1504: ZZ的橱柜 (优先队列)
    离散化思想
    POJ 2777 Count Color (线段树)
    POJ 1823 Hotel (线段树)
  • 原文地址:https://www.cnblogs.com/skillking/p/9675844.html
Copyright © 2011-2022 走看看