
Solution题目要求反转链表的元素每k个元素进行一次反转。注意链表中可能存在无效结点。代码如下//反转链表中元素的位置#includeiostream#includevector#includealgorithm#includestdio.husing namespace std;structNode{intaddr;intkey;intnext;}node[100005];intn,k;//n个结点k个结点为一个子串intstart_pos;//开始位置vectorNodevec;bool exist[100005];intmain(){cinstart_posnk;intaddress;for(inti0;in;i){cinaddress;node[address].addraddress;exist[address]true;cinnode[address].keynode[address].next;}intprev-1;while(true){//链成链表Node temp;temp.addrnode[start_pos].addr;temp.keynode[start_pos].key;temp.nextnode[start_pos].next;vec.push_back(temp);start_posnode[start_pos].next;if(start_pos-1||!exist[start_pos]){break;}}intans0;bool flagtrue;for(inti0;ivec.size();i){if(ansk){ans;}if(ansk){for(intji;ji1-k;j--){if(flag){printf(%05d %d,vec[j].addr,vec[j].key);//coutvec[j].addr vec[j].key;flagfalse;}else{printf( %05d\n%05d %d,vec[j].addr,vec[j].addr,vec[j].key);//cout vec[j].addrendl;//coutvec[j].addr vec[j].key;}}ans0;}}if(ans!0){for(intivec.size()-ans;ivec.size();i){printf( %05d\n%05d %d,vec[i].addr,vec[i].addr,vec[i].key);//cout vec[i].addrendl;//coutvec[i].addr vec[i].key;}}cout -1;return0;}