#include <iostream>
using namespace std;
// 假设你的链表节点结构如下
struct linklist {
int data;
linklist* next;
};
// 旋转链表的函数
linklist* rotateRight(linklist* head, int k) {
if (!head || k == 0) {
return head;
}
int n = 1;
linklist* cur = head;
// 计算链表长度
while (cur->next) {
cur = cur->next;
n++;
}
// 计算实际旋转的步数
k = k % n;
if (k == 0) {
return head; // 如果 k 是链表长度的倍数,不需要旋转
}
cur->next = head; // 将链表首尾相连
// 找到新的头节点
cur = head;
for (int i = 0; i < n - k - 1; i++) {
cur = cur->next;
}
linklist* newhead = cur->next; // 新的头节点
cur->next = nullptr; // 新的尾节点
return newhead;
}
int main() {
// 假设你有一个示例链表: 1 -> 2 -> 3 -> 4 -> 5
linklist* head = new linklist;
linklist* p = head;
for (int i = 1; i <= 5; i++) {
p->data = i;
if (i < 5) {
p->next = new linklist;
p = p->next;
} else {
p->next = nullptr;
}
}
int k = 2; // 旋转步数
linklist* rotated = rotateRight(head, k);
// 打印旋转后的链表
linklist* cur = rotated;
while (cur) {
cout << cur->data << " -> ";
cur = cur->next;
}
cout << "nullptr" << endl;
return 0;
}