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

    Given a list, rotate the list to the right by k places, where k is non-negative.

    For example:
    Given 1->2->3->4->5->NULL and k = 2,
    return 4->5->1->2->3->NULL.

     此题先想需要多少个ListNode,dummy,用于返回。fast,slow。三个就够了,我开始做的时候,多用了一个cur来计算链表长度,我的原始代码如下:

    /**

     * Definition for singly-linked list.

     * public class ListNode {

     *     int val;

     *     ListNode next;

     *     ListNode(int x) { val = x; }

     * }

     */

    public class Solution {

        public ListNode rotateRight(ListNode head, int k) {

            ListNode slow = head;

            ListNode fast = head;

            ListNode cur = head;

            ListNode dummy = new ListNode(0);

            if(head==null) return head;

            int len = 0;

            while(cur!=null){

                cur=cur.next;

                len++;

            }

            k = k%len;

            if(k==0) return head;

            while(k>0){

                fast = fast.next;

                k--;

            }

            while(fast!=null&&fast.next!=null){

                fast = fast.next;

                slow = slow.next;

            }

            fast.next = head;

            dummy.next = slow.next;

            slow.next = null;

            return dummy.next;

        }

    }

    看了答案以后,发现答案的方法很简明,答案代码如下:

     

    /**

     * Definition for singly-linked list.

     * public class ListNode {

     *     int val;

     *     ListNode next;

     *     ListNode(int x) { val = x; }

     * }

     */

    public class Solution {

        public ListNode rotateRight(ListNode head, int k) {

            ListNode dummy = new ListNode(0);

            ListNode slow = dummy;

            ListNode fast = dummy;

            dummy.next = head;

            if(head==null||head.next==null) return head;

            int len = 0;

            while(fast.next!=null){

                fast = fast.next;

                len++;

            }

            k = k%len;

            while(len-k>0){

                slow = slow.next;

                len--;

            }

            fast.next = dummy.next;

            dummy.next = slow.next;

            slow.next = null;

            return dummy.next;

        }

    }

     
     
  • 相关阅读:
    线程同步的几种实现方案
    关于java中三种初始化块的执行顺序
    java数组
    Codeblocks 17汉化
    聚焦天狗
    linux下搭建svn添加多个仓库(项目)
    使用Python在windows环境下获取Linux服务器的磁盘、内存等信息
    python smtplib使用163发送邮件 报错 554 DT:SPM
    防抖与节流
    js
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6363909.html
Copyright © 2011-2022 走看看