链表的反转

1)链表的反转

 原先的链表保留一个头结点head,通过该头结点可以遍历链表的每一个结点里内容,如果在链表遍历的过程中,再用两个指针把把链表里的内容指针的指向改变,使原先指向下一个节点的,改为指向它的前一个节点,就可以实现链表的反转了!

#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;

   

   for(i=1;i<len;i++)

    {

     ptr1=(llink)malloc(sizeof(node));

      if(!ptr1)

       return NULL;                

       ptr1->num=array[i];

       ptr->next=NULL;

       ptr->next=ptr1;

       ptr=ptr->next;      

    } 

    return head;  

  }

//链表反转的实现过程

  llink invertllist(llink head)

  {

   llink mid,last;      

    

    mid=NULL;

    while(head!=NULL)

     {

      last=mid;                

      mid=head;

      head=head->next;

      mid->next=last;               

     }    

     return mid;

  }

  

  void freellist(llink head)

  {

   llink ptr;

   while(head!=NULL)

    {

     ptr=head;                

     head=head->next;

     free(ptr);               

    }     

  }

int main()

{

  int llist[6]={1,2,3,4,5,6};

  llink head;

  

  head=createllist(llist ,6);

  if(!head)

  {

   exit(1);         

  }  

  printllist(head);

  head=invertllist(head);

  printllist(head);

 printllist(head);

 return 0;    

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值