一、题目概述
给定单链表,使每K个元素进行一次逆转,若剩余元素不足K个,不逆转
二、思路
1、利用algorithm库函数reverse(it1,it2)进行逆转;
2、注意判断条件:仅i + K <=L.size()才执行逆转;
3、测试点错误注意,给定结点中有不属于该链表的结点。
三、代码
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct node
{
int data, addr, next;
};
int main()
{
int head, N, K;
scanf("%d %d %d", &head, &N, &K);
vector<node> linklist(100000), ans;
for( int i = 0; i < N; ++i )
{
node temp;
scanf("%d %d %d", &temp.addr, &temp.data, &temp.next);
linklist[temp.addr] = temp;
}
for( int i = head; i != -1; i = linklist[i].next )
ans.push_back(linklist[i]);
for( int i = 0; i + K <= ans.size(); i += K )
reverse(ans.begin() + i, ans.begin() + i + K);
printf("%05d %d ", ans[0].addr, ans[0].data);
for( int i = 1; i < ans.size(); ++i )
printf("%05d\n%05d %d ", ans[i].addr, ans[i].addr, ans[i].data);
printf("-1");
}