题意
给定一个链表,旋转链表,使得每个节点向右移动 k 个位置,其中 k 是一个非负数
样例
给出链表 1->2->3->4->5->null
和 k=2
返回 4->5->1->2->3->null
思路
设链表长度为 n,
当 k = n
时,链表旋转后的结果就是原链表(当 k 为 n 的倍数时,结果也是一样)。
当 k < n
时,其实旋转链表就是将第 n - k
个元素后的所有元素都放在该链表的头结点之前,并把第 n - k
个元素的下一个节点指向 null
即可。
当 k > n
时,则说明不止需要旋转一圈,但多旋转一圈其实跟多旋转两圈没什么区别,所以只需要将链表旋转 k % n
个位置即可。
代码实现
1 | /** |
原题地址
LintCode:旋转链表