题目:
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
我在解此题时,遇到的最大问题是没能完全题目的问题(其实也不能完全怪我,它题目根本没描述清楚),现详解如下;
给出一个单链表,和一个K值,根据K值往右旋转,例如:
所以,先求出链表的长度len,其实按着倒数第K%len个位置旋转,这个位置即len-(K%len)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @param {integer} k
# @return {ListNode}
def rotateRight(self, head, k):
len = 0
if head:
p, len = head, 1
while(p.next):
p = p.next
len += 1
k=k%len
if k==0:return head
else:
return head
sentry_node = ListNode(-1)
sentry_node.next = head
p,i = head, 0
k = len-k-1
while (i<k):
p = p.next
i += 1
tmp = p
if p.next:
p = p.next
tmp.next = None
sentry_node.next = p
while(p.next):
p=p.next
p.next = head
return sentry_node.next