LeetCode Java刷题笔记—61. 旋转链表

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—61. 旋转链表相关的知识,希望对你有一定的参考价值。

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;

以上是关于LeetCode Java刷题笔记—61. 旋转链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记—92. 反转链表 II

java刷题--61旋转链表

力扣(LeetCode)剑指offer刷题笔记(java),已完结!!!

力扣(LeetCode)剑指offer刷题笔记(java),已完结!!!

LeetCode Java刷题笔记—206. 反转链表

LeetCode Java刷题笔记—143. 重排链表