旋转链表 指针移动

题目:

  

 思路:

   1  遍历链表将Node中的val 放入双端队列 

   2  用双端队列的api    (注意用K % node数量) 是移动的次数,减少重复移动

     getLast    //获取最后一个值

     pollLast   //移除最后一个值

     addFirst  //将最后一个值加到头部

   3  新建链表,将队列中的值链起来


 

(一)代码

class Solution {
    public ListNode rotateRight(ListNode head, int k) {

       if(head == null){
           return null;
       }

       //将链表中的数据  添加到队列中
       Deque<Integer> queue = new LinkedList<>();
       int z = 0;
       while (head != null){
           queue.add(head.val);
           head = head.next;
           z++;
       }

       //移动链表节点
       int zz = k % z;
       while (zz > 0){
           Integer last = queue.getLast();
           queue.pollLast();
           queue.addFirst(last);
           zz--;
       }

        //新建链表
        ListNode l = new ListNode(0);
        ListNode ll = l;
        while(queue.size() > 0){
            ListNode nodeList = new ListNode(queue.pollFirst());
            l.next = nodeList;
            l = nodeList;
        }

        return ll.next;
    }
}

 

 


 

 

 

     要走的弯路,一步不会少

 

posted @ 2021-09-29 13:56  朝才  阅读(41)  评论(0编辑  收藏  举报