170. 旋转链表
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
实现思路:
定义两个指针left和right,然后求出结点的真实移动位置,移动的部分放在left中,未移动的部分放在right中,两个节点连接,就得到移动后的链表,时间复杂度O(n)。
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: the List
@param k: rotate to the right k places
@return: the list after rotation
"""
def rotateRight(self, head, k):
# write your code here
if head is None or head.next is None:
return head
#定义两个指针
left, right = ListNode(0), ListNode(0)
ln, rn = left, right
cur = head
#链表的长度
count = 0
while cur:
count += 1
cur = cur.next
cur = head
#k的值有可能大于count,所以取余才是真实的移动
index = k % count
while cur:
if count > index:
rn.next = cur
rn = rn.next
else:
ln.next = cur
ln = ln.next
count -= 1
cur = cur.next
rn.next = None
ln.next = right.next
return left.next