程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 鏈表的反轉

鏈表的反轉

編輯:關於C

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

}

分享到:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved