给定一个链表,旋转链表,将链表每个节点向右移动 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
代码如下,还是采用双指针的方式:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def rotateRight(self, head, k):
dummy = ListNode(0)
dummy.next =left = right = count =head
num = 0
while count!=None:#记录长度
num+=1
count=count.next
if num<2 or k%num==0:#特殊情况
return head
for _ in range(k%num):#双指针之间的长度先移动好
right =right.next
while right.next != None:#双指针移动到末尾
left = left.next
right = right.next
#整块直接移动到前面
dummy.next = left.next
right.next=head
left.next=None
return dummy.next