码迷,mamicode.com
首页 > 其他好文 > 详细

61. Rotate List

时间:2018-09-19 19:49:12      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:ota   tst   nbsp   pre   节点   col   bubuko   com   return   

一、题目

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

 

      

 

61. Rotate List

标签:ota   tst   nbsp   pre   节点   col   bubuko   com   return   

原文地址:https://www.cnblogs.com/skillking/p/9675844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!