2012-05-04 45 views
-1

我想打印出一個雙向鏈表。我能夠從頭到尾獲得列表打印。但是,當我嘗試從尾部到頭部打印頭部打印時。這是代碼的最後一部分。我已經包含鏈接列表代碼。有什麼建議麼?雙向鏈表Fortran。從尾部打印到頭部。

*INPUT UP TO EOF 
    NULLIFY(HEAD,TAIL) 
    DO WHILE(.TRUE.) 
     READ(1,*,END=999)NAMEIN 
     READ(1,*,END=999)AGEIN 

*INITIALIZE THE POINTERS TO NULL 
     NULLIFY(CURRENT) 
     ALLOCATE(CURRENT) 
     CURRENT%PERSON = NAMEIN 
     CURRENT%AGE = AGEIN 
*IF THERE IS NOT AT LEAST ONE NODE 

     IF(.NOT.ASSOCIATED(HEAD))THEN 
      HEAD => CURRENT 
      TAIL => CURRENT 
      NULLIFY(HEAD%NEXT,HEAD%PREV) 

*IF THE CURRENT IS LAST NODE  
     ELSE 
*PLACE AT END OF LIST 

      TAIL%NEXT =>CURRENT 
     CURRENT%PREV=>TAIL 
      NULLIFY(CURRENT%NEXT) 

*CHANGE TAIL POINTER TO NEW END 
      TAIL => CURRENT 
      NULLIFY(CURRENT%NEXT) 
      NULLIFY(CURRENT%PREV) 
    END IF  
    END DO 

999 CONTINUE 

*PRINT FROM HEAD TO TAIL  
*POINT TO THE BEGINNING 
    NULLIFY(TEMP) 
    TEMP => HEAD 
*PRINT EACH NODE 
    PRINT *,'-----PRINTING fROM HEAD TO TAIL-----' 
    DO WHILE(ASSOCIATED(TEMP)) 
     PRINT 5,TEMP%PERSON 
     PRINT 10,TEMP%AGE 
     TEMP => TEMP%NEXT 
    END DO 

*PRINT FROM TAIL TO HEAD  
*POINT TO THE BEGINNING 
*PRINT EACH NODE 
    CURRENT => TAIL 
    PRINT *,'-----PRINTING fROM TAIL TO HEAD------' 
    DO WHILE(ASSOCIATED(cCURRENT)) 
     PRINT 5,CURRENT%PERSON 
     PRINT 10,CURRENT%AGE 
     CURRENT => CURRENT%PREV 
    END DO  
+1

能否請您停用Caps Lock鍵,當你寫英文文本? – Mat

+1

大寫鎖定破? –

+12

@Barry:SPECIAL FORTRAN KEYBOARD –

回答

1

你廢了PREV指針,從而破壞反向鏈接:

*CHANGE TAIL POINTER TO NEW END 
      TAIL => CURRENT 
      NULLIFY(CURRENT%NEXT) 
      NULLIFY(CURRENT%PREV) <--- THE PROBLEM LIES HERE