题目:
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
将string数据放入vector:
#include<iostream>
#include<sstream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main(){
while(1){
string str;
int k;
vector<int> v;
int value;
cout<<"输入序列:";
getline(cin,str);
cout<<"输入要移动次数:";
cin>>k;
istringstream s(str);
while(s>>value) {v.push_back(value);}
cout<<"原先序列为:";
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));cout<<"\n";
int n=v.size();
int d=k%n;
rotate(v.begin(),v.end()-d,v.end());
cout<<"移动后序列为:";
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl<<endl;
cin.get();
}
return 0;
}
直接对str进行处理:
#include<iostream>
#include<sstream>
#include<algorithm>
#include<vector>
#include<iterator>
using namespace std;
int main(){
while(1){
string str;
int k;
vector<int> v;
int value;
cout<<"输入序列:";
getline(cin,str);
cout<<"输入要移动次数:";
cin>>k;
cout<<"原先序列为:"; cout<<str<<"\n";
int n=str.size();
int d=k%n;
rotate(str.begin(),str.end()-d,str.end());
cout<<"移动后序列为:"; cout<<str<<"\n";
cout<<endl;
cin.get();
}
return 0;
}
结果:str输入时第一位也要加“ ”(空格),才能保证输出整齐
输入序列: 0 1 2
输入要移动次数:4
原先序列为: 0 1 2
移动后序列为: 1 2 0
输入序列: 1 2 3 4 5
输入要移动次数:2
原先序列为: 1 2 3 4 5
移动后序列为: 5 1 2 3 4