LeetCode Java刷题笔记—61. 旋转链表
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
中等难度。首先得到链表的节点数量n以及尾部节点,然后计算k%n的值m,如果m为0,则表示旋转之后的链表和原来的链表是一样的,直接返回head,否则,该值可以表示当前链表的倒数第m个节点就是旋转后的头节点。
public ListNode rotateRight( ListNode head, int k ){ if( head == null || head.next == null || k == 0 ){ return head; } //链表总节点数 int count = 1; ListNode tmp = head; while( tmp.next != null ){ count++; tmp = tmp.next; } k %= count; //k为0直接返回 if( k == 0 ){ return head; } // 旋转 tmp.next = head; //找到倒数第k+1个节点 for( int i = 0; i < count - k; i++ ){ tmp = tmp.next; } //tmp节点为旋转后链表头节点的前驱节点, ListNode newHead = tmp.next; //断开 tmp.next = null; return newHead; }
上一篇:
IDEA上Java项目控制台中文乱码