Leetcode-61.旋转链表
题目描述
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:双指针
思路:
1.先遍历链表确定链表长度len。
2.k对len取余,确定实际右移了几个位置。
3.先让前指针移动k个单位,然后前后指针同时移动,直到前指针的下一位为空。此时后指针所在位置就是右移后的末位指针。
4.先把前指针与原链表头指针链接,然后让头指针指向后指针的下一位,然后让后指针下一位指向空,返回头指针head
1 | /** |