描述
Given a list, rotate the list to the right by k places, where k is non-negative.
For example: Given 1->2->3->4->5->nullptr and k = 2, return 4->5->1->2->3->nullptr.
Given a list, rotate the list to the right by k places, where k is non-negative.
For example: Given 1->2->3->4->5->nullptr and k = 2, return 4->5->1->2->3->nullptr.
#include<iostream>
using namespace std;
struct node
{
int data;
node *next;
};
class mylist
{
node *head;
public:
mylist()
{
head = new node();
head->next = NULL;
}
void CreateList(int a[], int n);
void Display();
friend void RotateList(mylist &list,int k);
~mylist();
};
void mylist::CreateList(int a[], int n)
{
node *p = head;
for (int i = 0; i < n; i++)
{
node *q = new node();
q->data = a[i];
p->next = q;
p = q;
}
p->next = NULL;
}
void mylist::Display()
{
node *p = head->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void RotateList(mylist &list,int k)
{
node *p = list.head->next;
int length = 0;
while (p)
{
length++;
p = p->next;
}
if (k > length)
return;
//===
int count = length - k;
p = list.head;
for (int i = 1; i <= count; i++)
p = p->next;
node *q = p->next;
p->next = NULL;
//===
while (q)
{
node *temp = q->next;
q->next = list.head->next;
list.head->next = q;
q = temp;
}
}
mylist::~mylist()
{
node *p = head;
while (head)
{
head = p->next;
delete p;
p = head;
}
}
int main()
{
//===
const int n = 5;
int a[n] = { 1, 2, 3, 4, 5};
mylist list;
list.CreateList(a, n);
list.Display();
//===
int k = 2;
RotateList(list, k);
list.Display();
}