网新恒天笔试题,有一个整型的单向链表A,请编程将其倒序。

代码如下:

#include <stdio.h>
#include 
<stdlib.h>

struct llist
{
    
int num;
    
struct llist *next;    
};
typedef 
struct llist node;
typedef node 
*llink;

void printllist(llink ptr)//链表输出
{
    
while(ptr != NULL)
    {
        printf(
"[%d]",ptr->num);
        ptr 
= ptr->next;    
    }
    printf(
"\n");    


//链表的创建
llink createllist(int *array,int len)
{
    llink head;
//链表的开始指针 
    llink ptr,ptr1;
    
int i;
    
    
//创建第一个结点
    head = (llink)malloc(sizeof(node));//分配内存 
    if(!head)//检查指针 
    {return NULL;}
    head
->num = array[0]; //创建结点内容 
    head->next =NULL;//设置指针初值 
    ptr = head;    //将ptr指向链表开始 
    for(i=1;i<len;i++)    //创建其他结点循环 
    {
        ptr1 
= (llink)malloc(sizeof(node));
        
if(!ptr1)
        {
            
return NULL;
        }    
        ptr1
->num = array[i];  //创建结点内容 
        ptr1->next =NULL;
        ptr
->next = ptr1;
        ptr 
= ptr->next;
    }    
    
return head;


//链表的反转
llink invertllist(llink head)
{
    llink mid,last;
    mid 
= NULL; //mid是head的前结点 
    while(head != NULL)
    {
        last 
= mid;    //last是mid的前结点 
        mid =head;
        head 
= head->next; //下一个结点 
        mid->next = last;    //mid指向前结点last 
    }
    
return mid;    


int main(int argc, char *argv[])
{
  
int llist[6= {1,2,3,4,5,6};
  llink head;
  
  head 
= createllist(llist,6);
  
if(!head)
  {
    printf(
"内存分配失败!\n");
    exit(
1);    
  }
  printf(
"原来的链表:");
  printllist(head);
  head 
= invertllist(head);
  printf(
"反转后链表:");
  printllist(head);
    
    
  
  system(
"PAUSE");    
  
return 0;
}

 

 

posted @ 2011-03-13 17:15  草珊瑚  阅读(1041)  评论(0编辑  收藏  举报