1、思路
先进行一次遍历获取链表长度,并将链表头尾相接成环;
第二次遍历,将遍历的指针指向新的头结点的前一个节点,再断开环
2、代码实现(C++)
/**
* 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) {
// 链表为空
if (head == NULL) {
return NULL;
}
// 求链表长度
int l = 1;
ListNode* p = head;
while (p->next != NULL) {
p = p->next;
l++;
}
p->next = head; // 头尾相接,此时 p 指向尾节点
k = k % l;
for (int i = 0; i < l-k; i++) {
p = p->next;
} // 将指针移到旋转后的头结点的前一个节点
head = p->next; // 保存头节点
p->next = NULL; // 断开环
return head;
}
};