给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
#ifndef C170_H
#define C170_H
#include<iostream>
using namespace std;
struct ListNode{
int val;
ListNode *next;
ListNode(int val)
{
this->val = val;
this->next = NULL;
}
};
class Solution {
public:
/**
* @param head: the list
* @param k: rotate to the right k places
* @return: the list after rotation
*/
ListNode *rotateRight(ListNode *head, int k) {
// write your code here
if (k == 0)
return head;
ListNode *p = head;
int len = 0;
while (p != NULL)
{
len++;
p = p->next;
}
if (len == 0)
return head;
if (len >= k)
len -= k;
else
{
k = k%len;
if (k == 0)
return head;
len -= k;
}
if (len <= 0)
return head;
ListNode *q = head;;
while (len != 1)
{
len--;
q = q->next;
}
ListNode *node = q->next;
ListNode *l = node;
while (l->next != NULL)
{
l = l->next;
}
l->next = head;
q->next = NULL;
return node;
}
};
#endif