题目
分析
如果k= 0 或 k为结点数的整数倍,链表无变化 可以直接返回头结点。
否则先用 K 对 NUM 取余,获得旋转次数,将后K个先打出,在将前 NUM - K个打出 构造新链表
题解
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
ListNode *i = head;
if(i == NULL)
return head;
int num = 0;
while(i != NULL) {
num++;
i = i->next;
}
k = k % num;
if(k == 0)
return head;
int j = num - k;
int n = j;
ListNode newhead(0);
ListNode *p = &newhead;
ListNode *q = &newhead;
ListNode *temp = head;
while(j--) temp = temp->next;
while(temp != NULL){
ListNode *node = new ListNode(temp->val);
p->next = node;
p = p->next;
temp = temp->next;
}
temp = head;
while(n--){
ListNode *node = new ListNode(temp->val);
p->next = node;
p = p->next;
temp = temp->next;
}
q = q->next;
return q;
}
};