C 언어 단일 연결리스트 반전

단일 쇄 반전 반복적 방법은 반복 (사이클)에 의해 구현되는 곳에는, 재귀 수 가능하다.

전 전에 노드를 참조 아래 다이어그램, CUR은 현재 노드, 임시 노드 TEMP를 의미합니다.

주요 아이디어는 것입니다 Cur 코드> 다음 = 사전, 옆에 TEMP에 할당 된 Cur 코드>를 향상시키는 데 필요한 즉, 현재 노드 포인트 전에 노드를 만들 . 그런 다음 아래로.

#INCLUDE <STDIO.H> 
의 typedef 구조체 node_s {
     INT 항목;
    구조체 node_s은 * 다음; 
} node_t, * 링크; 

// 新建节点 
링크 newNode ( INT의 항목) { 
    링크 새로운 = malloc을 ( 를 sizeof (node_t));
     -> 아이템 = 항목;
     -> 다음 = NULL;
    반환  새로운 ; 
} 

역방향 링크 (링크 헤더) { 
    경우 (헤더 == NULL || header-> 다음 == NULL) {
         반환  헤더를}
    링크 사전;// 이전 
    링크 CUR; //  
    링크 TEMP; // 임시 변수 
    사전 = 헤더, 
    CUR = header-> 다음으로, 
    사전 -> 다음 = NULL; 

    그동안 (! CUR = NULL) 
    {     TEMP
     = 똥개> 다음; //하지 실수로 순서 참고 
        > CUR 다음 = 사전, 
        사전 = CUR; 
        CUR = TEMP; 
    } 
    리턴 프리; 
} 

무효 프린트 링크 (* node_t의 헤더) {
     while 회 (헤더! = NULL) {
         IF (header-> 다음 =!NULL) { 
            의 printf ( " % D-> " ;, header-> 항목) // : 마지막 
        }
         다른 { 
            의 printf ( " % d 개 " , header-> 항목); 
        } 
        헤더 = header-> , 다음 
    } 
    의 printf ( " \ N- ' ); 
} 
INT 본체 ( 의 INT 는 argc, 숯불 * argv와 []) {
     // 단방향 링크 생성 
    헤더 = NULL을 node_t * * CUR = NULL;
      ( INT I = . 1 , I <= . (3) , ++ I) { 
        node_t * 새로운 새 = newNode (I),
         IF (헤더 == NULL) { 
            헤더 = 새로운 새 ; 
        } 
        다른 { 
            CUR -> 다음 = 새로운 새 ;   // 나중에 추가 
        } 
        CUR = 새로운 새로운 ; 
    } 

    프린트 링크 (헤더); // 인쇄 목록 
    newHeader = 역 (헤더)에 자동;   // 자동 키워드 만 할당 문에서 
    (newHeader에) 프린트 링크; 
    시스템 ( "일시 정지 " ); 
}

 

추천

출처www.cnblogs.com/imhuanxi/p/11919711.html