首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

经典软件面试题(二)

2012-10-21 
经典软件面试题(2) 实现及测试代码如下:#include stdio.h#include stdlib.htypedef struct tagListNod

经典软件面试题(2)

  •  

    实现及测试代码如下:

  • #include <stdio.h>  #include <stdlib.h>  
  •   typedef struct tagListNode{  
  •     int data;      struct tagListNode* next;  
  • }ListNode, *List;    
  • void PrintList(List head);  List ReverseList(List head);  
  •   int main()  
  • {      //分配链表头结点  
  •     ListNode *head;      head = (ListNode*)malloc(sizeof(ListNode));  
  •     head->next = NULL;      head->data = -1;  
  •       //将[1,10]加入链表  

  •     ListNode *p, *q;  
  •     p = head;      for(int i = 1; i <= 10; i++)  
  •     {          q = (ListNode *)malloc(sizeof(ListNode));  
  •         q->data = i;          q->next = NULL;  
  •         p->next = q;          p = q;          
  •     }    
  •     PrintList(head);           /*输出原始链表*/      head = ReverseList(head);  /*逆序链表*/  
  •     PrintList(head);           /*输出逆序后的链表*/      return 0;  
  • }    
  • List ReverseList(List head)  {  
  •     if(head->next == NULL || head->next->next == NULL)        {  
  •        return head;   /*链表为空或只有一个元素则直接返回*/      }  
  •       ListNode *t = NULL,  
  •              *p = head->next,               *q = head->next->next;  
  •     while(q != NULL)      {          
  •       t = q->next;        q->next = p;  
  •       p = q;        q = t;  
  •     }    
  •     /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/      head->next->next = NULL;  /*设置链表尾*/  
  •     head->next = p;           /*调整链表头*/      return head;  
  • }    
  • void PrintList(List head)  {  
  •     ListNode* p = head->next;      while(p != NULL)  
  •     {          printf("%d ", p->data);  
  •         p = p->next;      }  
  •     printf("\n");  }  

     


  • 热点排行