按模反转字符串

按模反转字符串,如123456,按模2反转,则输出为214365,按模3反转,则为321654,按模4,则是432165

//Reverse the node link
typedef struct linknode{
 int data;
 struct linknode* next;
}node;

node* ReverseLinkNode(node* head)
{
 node*previous = head;
 node*q = head->next;
 head->next = NULL;

 while(NULL != q)
 {
  node*tmp = q->next;
  q->next = previous;
  previous = q;
  q = tmp;
 }

 
 head = previous;

 return head;
}

void test_reverse_string_as_mode()
{
 //Node link via hard code here
 node*head = (node*)malloc(sizeof(node));
 head->data = 1;

 node*node1 = (node*)malloc(sizeof(node));
 node1->data = 2;
 head->next = node1;

 node*node2 = (node*)malloc(sizeof(node));
 node2->data = 3;
 node1->next = node2;

 node*node3 = (node*)malloc(sizeof(node));
 node3->data = 4;
 node2->next = node3;

 node*node4 = (node*)malloc(sizeof(node));
 node4->data = 5;
 node3->next = node4;

 node*node5 = (node*)malloc(sizeof(node));
 node5->data = 6;
 node5->next = NULL;
 node4->next = node5;

 node*p = head;
 const int k = 2;  //mode,k >=2
 const int ilength = 6; //linknode size
 int i = 0;
 node*new_link = NULL;
 node*tpm_link = NULL;
 node*cur = NULL;
 int ileftsize = ilength;
 while(NULL != p)
 {
  ileftsize--;

  if(i++ <= k)
  {
   node* tpm = (node*)malloc(sizeof(node));
   tpm->data = p->data;
   tpm->next = p->next;
   if(NULL == tpm_link)
   {
    tpm_link = tpm;
    cur = tpm_link;
   }
   else
   {
    cur->next = tpm;
    cur = tpm;
   }

   if(i == k || ileftsize == 0)
   {
    cur->next = NULL;
    i = 0;
    node*tmp_sort = ReverseLinkNode(tpm_link);
    tpm_link = NULL;
    if(NULL == new_link)
    {
     new_link = tmp_sort;
    }
    else //连接合并两个排序好的段
    {
     node* j = new_link;
     while(1)
     {
      if(NULL == j->next)
      {
       j->next = tmp_sort;
       break;
      }

      j = j->next;
     }
    }
   }
  }

  p = p->next;
 }

 

 while(NULL != new_link)
 {
  cout << new_link->data << endl;
  new_link = new_link->next;
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值