zoukankan      html  css  js  c++  java
  • 微软笔试题

      1 #include<iostream>
      2 using namespace std;
      3 
      4 /*
      5 链表节点
      6 */
      7 struct Node
      8 {
      9     int value;
     10     Node* next;
     11 };
     12 /*
     13 创建一个长度为len的链表,并返回链表头结点
     14 */
     15 Node* init(int len)
     16 {
     17     Node* head = new Node[len];
     18     if(head == NULL)
     19     {
     20         cout<<"new failed"<<endl;
     21         return NULL;
     22     }
     23     Node* p = head;
     24     for(int i = 1; i <= len ;p++, i++)
     25     {
     26         if( i < len )
     27         {
     28             p->value = i;
     29             p->next = p+1;
     30         }
     31         else
     32         {
     33             p->value = i;
     34             p->next = NULL;
     35         }
     36     }
     37     return head;
     38 }
     39 
     40 /*
     41 接受一个链表头结点,并将链表逆置,返回链表头结点
     42 */
     43 Node* reverse(Node* head)
     44 {
     45     if(head == NULL)
     46     {
     47         cout<<"链表为空"<<endl;
     48         return NULL;
     49     }
     50     if(head->next == NULL)
     51         return head;
     52     Node* n_head = reverse(head->next);
     53     head->next->next = head;
     54     head->next = NULL;
     55     return n_head;
     56 }
     57 
     58 /*
     59 遍历一个链表
     60 */
     61 void traverse(Node* head)
     62 {
     63     Node* ptr = head;
     64     while( ptr != NULL )
     65     {
     66         if(ptr->next != NULL)
     67             cout<<ptr->value<<"->";
     68         else
     69             cout<<ptr->value<<endl;
     70         ptr = ptr->next;
     71     }
     72 }
     73 /*
     74 0->1->2->3->4 ===>> 0->4->1->3->2
     75 0->1->2->3 ===>> 0->3->1->2
     76 思路:
     77 1、找到len/2+1的节点,生成两个链表a,b
     78 2、将b链表逆置
     79 3、将逆置后的b一个个插入a链表中
     80 */
     81 void function(Node* head, int len)
     82 {
     83     if(head == NULL || len <= 0)
     84         return;
     85     int    n_list_len = len/2 + 1;
     86     Node* n_head = NULL;
     87     Node* temp = head; 
     88     for(int i = 1; i < n_list_len; i++)
     89         temp = temp->next;
     90     n_head = temp->next;
     91     temp->next = NULL;
     92     Node* a = head;
     93     Node* b = reverse(n_head);
     94     while( b != NULL)
     95     {
     96         temp = b;
     97         b = b->next;
     98         temp->next = a->next;
     99         a->next = temp;
    100         a = temp->next;
    101     }
    102 }
    103         
    104 int main()
    105 {
    106     Node* head;
    107     int len = 0;
    108     while(1)
    109     {
    110         cout<<"链表长度:";
    111         cin>>len;
    112         if(len <= 0)
    113         {
    114             cout<<"链表长度不能小于等于0"<<endl;
    115             continue;
    116         }
    117         head = init(len);
    118         traverse(head);
    119         function(head,len);
    120         traverse(head);
    121         head = reverse(head);
    122         traverse(head);
    123     }
    124     return 0;
    125 }
  • 相关阅读:
    枚举显示中文问题
    各种计算机体系结构的特点与应用(SMP、MPP等)
    Redis应用
    如果是除去末尾特定字符或字符串:TrimEnd方法性能优于Remove方法
    N笔试题
    PropertyGrid中的枚举显示为中文
    【1.2.3】操作系统性能优化
    【T4实践(一)】模板生成代码入门
    构成计算机的各类部件的功能及其相互关系
    net中String是引用类型还是值类型
  • 原文地址:https://www.cnblogs.com/GODYCA/p/3351678.html
Copyright © 2011-2022 走看看