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

鏈表逆序的遞歸/非遞歸算法

編輯:關於C語言

C代碼 
/**
 *鏈表逆序的遞歸/非遞歸算法
 */ 
#include <stdio.h> 
typedef int Item; 
typedef struct node 

        Item item; 
        struct node *next; 
}Node, *List; 
 
/*reverse1~2是不帶頭結點的逆序算法*/ 
List reverse1(List l) 

        Node *p1,*p2; 
        if(l==NULL) 
                return l; 
        p1=l->next; 
        l->next=NULL; 
        while(p1!=NULL){ 
                p2=p1->next; 
                p1->next=l; 
 
                l=p1; 
                p1=p2; 
        } 
        return l; 

List reverse2(List l) 

        if(l==NULL || l->next==NULL) 
                return l; 
        Node *p=reverse2(l->next); 
        l->next->next=l; 
        l->next=NULL; 
        return p; 

/*reverse3~4是帶頭結點鏈表的逆序算法*/ 
void reverse3(List l) 

        Node *p1,*p2,*p3; 
        if(l==NULL || l->next==NULL) 
                return; 
        p1=l->next; 
        p2=p1->next; 
        p1->next=NULL; 
        while(p2!=NULL){ 
                p3=p2->next; 
                p2->next=p1; 
                p1=p2; 
                p2=p3; 
        } 
        l->next=p1; 

void reverse4(List l, Node *first)/*此算法不是很好,需要在函數外判斷l!=NULL*/ 

        if(first==NULL || first->next==NULL){ 
                l->next=first; 
                return; 
        } 
        reverse4(l,first->next); 
        first->next->next=first; 
        first->next=NULL; 

作者“Ackerman's Blog”
 

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