# include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{ ElemType data; struct LNode * next;
} LNode, * LinkList;
bool InitList ( LinkList & L)
{ L = ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( L == NULL ) { return false ; } L-> next = NULL ; return true ;
}
bool ListInsert ( LinkList & L, int i, ElemType e)
{ if ( i < 1 ) { return false ; } LNode * p = L; int j = 0 ; p = L; while ( p != NULL && j < i - 1 ) { p = p-> next; j++ ; } if ( p == NULL ) { return false ; } LNode * s = ( LNode * ) malloc ( sizeof ( LNode) ) ; s-> data = e; s-> next = p-> next; p-> next = s; return true ;
}
bool ListDelete ( LinkList & L, int i, ElemType & e)
{ if ( i < 1 ) { return false ; } LNode * p = L; int j = 0 ; p = L; while ( p != NULL && j < i - 1 ) { p = p-> next; j++ ; } if ( p == NULL ) { return false ; } if ( p-> next == NULL ) { return false ; } LNode * q = p-> next; e = q-> data; p-> next = q-> next; free ( q) ; return true ;
}
void ListTraverse ( LinkList L)
{ LNode * p = L-> next; while ( p != NULL ) { cout << p-> data << " " ; p = p-> next; } cout << endl;
}
void ReverseList ( LinkList & L)
{ LNode * p = L-> next; LNode * q = NULL ; LNode * r = NULL ; L-> next = NULL ; while ( p != NULL ) { q = L-> next; L-> next = p; r = p-> next; p-> next = q; p = r; }
} int main ( )
{ LinkList L; InitList ( L) ; for ( int i = 1 ; i <= 10 ; i++ ) { ListInsert ( L, i, i) ; } ListTraverse ( L) ; ReverseList ( L) ; ListTraverse ( L) ; ReverseList ( L) ; ElemType e; ListDelete ( L, 3 , e) ; ListTraverse ( L) ; ListDelete ( L, 1 , e) ; ListTraverse ( L) ; return 0 ;
}