旋转链表 指针移动
题目:
思路:
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; } }
要走的弯路,一步不会少