网新恒天笔试题,有一个整型的单向链表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 ;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值