利用原结点空间逆置单链表
- 带头结点
- 不带头结点
#include <stdio.h>#include <stdlib.h>typedef struct Node_{ int data; struct Node_ * next;}Node, * List;void PrintList( List L ){ while( L != NULL ){ printf( "%d\t", L->data ); L = L->next; }}void ReverseList1( List L ){ List P = NULL; while( L->next != NULL ){ List S = L->next; L->next = S->next; S->next = P; P = S; } L->next = P;}void ReverseList2( List * L ){ List P = NULL; List S; while( *L != NULL ){ S = *L; *L = S->next; S->next = P; P = S; } *L = P;}int main(){ List Head = (List)malloc( sizeof( Node ) ); Head->next = NULL; for( int i = 1; i < 10; i++ ){ List S = (List)malloc( sizeof( Node ) ); S->data = i; S->next = Head->next; Head->next = S; } PrintList( Head->next ); ReverseList1( Head ); printf( "\n" ); PrintList( Head->next ); List Temp = Head->next; free( Head ); Head = Temp; ReverseList2( &Head ); PrintList( Head ); return 0;}