LeetCode -- 61. Rotate List

Posted kyrie211

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode -- 61. Rotate List相关的知识,希望对你有一定的参考价值。

技术图片

 

题意及思路

题意:大致是最尾节点(tail)移动到头节点,移动k次。

思路:先遍历一遍链表,得到其长度,用len对k取模(目的是想减少不必要的移动操作,比如一个链表长为3,k为4,其实只需要移动4%3次)。然后就是将尾节点移动到头节点的操作,具体操作见代码。

 

代码

/**
 * Definition for singly-linked list.
 * public class ListNode 
 *     int val;
 *     ListNode next;
 *     ListNode(int x)  val = x; 
 * 
 */
class Solution 
    public ListNode rotateRight(ListNode head, int k) 
        if(head==null) return head;
        ListNode p = head,q,top = new ListNode(-1);
        top.next = head;
        int len = 0;
        while(p!=null) len++; p=p.next;
        k %= len;
        while(k-->0)
            p = top;
            //找到尾节点前面一个位置
            while(p.next.next!=null) p=p.next;
            q = p.next;
            p.next = q.next;
            q.next = top.next;
            top.next = q;
        
        return top.next;
    

 

以上是关于LeetCode -- 61. Rotate List的主要内容,如果未能解决你的问题,请参考以下文章

一天一道LeetCode#61. Rotate List

LeetCode 61. Rotate List

Leetcode61 Rotate List

Leetcode 61 -- Rotate List

leetcode61. Rotate List

LeetCode61 Rotate List