原题目
Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
Example 2:
Input: 0->1->2->NULL, k = 4 Output: 2->0->1->NULL Explanation: rotate 1 steps to the right: 2->0->1->NULL rotate 2 steps to the right: 1->2->0->NULL rotate 3 steps to the right: 0->1->2->NULL rotate 4 steps to the right: 2->0->1->NULL
思路
边界条件:head == None
遍历两次链表,第一次记录链表的长度 length 和尾结点 rear
第二次找到和尾结点 rear 间隔 k%length 个位置的结点 front
rear.next = head
head = front.next
front.next = None
第一遍解法
class Solution:
def rotateRight(self, head, k):
if head == None:
return None
front = rear = head
length = 1
while rear.next: # rear 指向尾结点
rear = rear.next
length += 1
k = k % length
for i in range(length-k-1): # front 指向翻转后链表的尾结点
front = front.next
rear.next = head
head = front.next
front.next = None
return head
网上好的解法
自己可以改进的地方
最简代码
获得的思考
- ○ 的思想,k 的值大于链表长度的时候取余