题目大意:将一个单向链表向右旋转k位
分析:链表的考察。简单的链表操作,先找到尾结点,将尾结点连到头结点上,然后找到合适的位置将链表断开即可。
代码:转载自https://blog.csdn.net/zhangxiao93/article/details/49389623
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if (k == 0 || head == NULL)
return head;
ListNode*r = head;
int count = 1; //链表长度
while (r->next) {
count++;
r = r->next;
}
k = k % count;//处理k
r->next = head; //循环链表
int move = count - k;
while (move--) { //将首尾指针按循环链表移动move次
head = head->next;
r = r->next;
}
r->next = NULL;//拆开
return head;
}
};