C++ 1025 反转链表(25 分)

注意:int  b[100020] ;
  memset(b,-1,100020);  //全部初始化为-1   memset   在string.h  里面(此处可不用,不过是个小知识点)

思路1:自己写的(最后两个测试点报错)

#include<iostream>
#include<string.h>
#include<vector>
using namespace std;

struct stu{
  int first,data,next;
};

int main()
{
  int a1,n,k;
  cin>>a1>>n>>k;
  vector<stu> v(n);
  int a[100020],b[100020],m=0,t,tt;
  memset(b,-1,100020);  //全部初始化为-1   memset   在string.h  里面(此处可不用,不过是个小知识点)
  for(int i=0;i<n;i++){
    cin>>v[i].first>>v[i].data>>v[i].next;
  }

  
  while(m!=n){  
    for(int i=0;i<n;i++){
      if(v[i].first == a1){
       a[m]=v[i].data;
       b[m]=v[i].first;
       a1=v[i].next;
       m++;
       
       break;
      }
    }
  }
  
  for(int i=0;i<n/k;i++){
    for (int j=0;j<k/2;j++){           //反转
      t=a[i*k+j];
      a[i*k+j]=a[i*k+k-1-j];
      a[i*k+k-1-j]=t;
      tt=b[i*k+j];
      b[i*k+j]=b[i*k+k-1-j];
      b[i*k+k-1-j]=tt;
    }
  }
 
 for(int i=0;i<n-1;i++){  //输出
   printf("%05d %d %05d\n",b[i],a[i],b[i+1]);
 }

  printf("%05d %d %d",b[n-1],a[n-1],b[n]);
  return 0;
}

结果:

虽然没有写成功,但学到了一下几个小技巧。

技巧1:一维数组全部初始化为-1

技巧2:%5d   %05d

分割线-------------------------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/marskai/articles/9299362.html

这个里面写的结果挺好的。

小技巧:reverse函数

#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <cmath>
#include <list>
#include <deque>
#define max 100005
using namespace std;
struct node{
    int  frontad;
    int data;
    int  backad;
};
 
struct Data
{
    int data;
    int next;
};
int main()
{   int firstad;
    int k;
    int n,s,cur;
    node temp;
    Data D[max];
    int count1=0;
    vector<node> in;
    vector<node> ou;
    scanf("%d %d %d",&firstad,&n,&k);
    for(int i=0;i<n;i++)
    {
        cin>>temp.frontad>>temp.data>>temp.backad;
        in.push_back(temp);
        if(temp.frontad==-1)
        {
            continue;
        }
        D[temp.frontad].data=temp.data;
        D[temp.frontad].next=temp.backad;
    }
    cur=firstad;
    while(1)
    {
        node semp;
        semp.frontad=cur;
        semp.data=D[cur].data;
        semp.backad=D[cur].next;
        ou.push_back(semp);
        if(D[cur].next==-1)
            break;
        cur=D[cur].next;
    }
    for(s=0;s<ou.size()/k;s++)
    {
    reverse(ou.begin()+s*k,ou.begin()+(s+1)*k);
    }
    for(int i=0;i<ou.size();i++){
        if(i==ou.size()-1){
            printf("%05d %d -1\n",ou[i].frontad,ou[i].data);
        }
        else{
            printf("%05d %d %05d\n",ou[i].frontad,ou[i].data,ou[i+1].frontad );
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36122764/article/details/82260759
今日推荐