# include <iostream>
using namespace std;
typedef int Elemtype;
# define Maxsize 100
# define ERROR 0
# define OK 1
typedef struct LNode
{
Elemtype data;
struct LNode * next;
} LNode, * LinkList;
bool InitList ( LinkList& L)
{
L = ( LinkList) malloc ( sizeof ( LNode) ) ;
if ( L == NULL )
return ERROR;
L-> data = 0 ;
L-> next = NULL ;
return OK;
}
bool ListEmpty ( LinkList L)
{
if ( L-> next != NULL )
{
cout << "not empty" << endl;
return OK;
}
else
{
cout << "empty,只有头节点" << endl;
return ERROR;
}
}
int ListLength ( LinkList L)
{
LNode* p;
p = L-> next;
int i = 0 ;
while ( p != NULL )
{
p = p-> next;
i++ ;
}
return i;
}
LinkList List_HeadInsert ( LinkList& L)
{
L = ( LinkList) malloc ( sizeof ( LNode) ) ;
L-> data = 0 ;
L-> next = NULL ;
LNode* s = NULL ;
int x = 0 ;
while ( cin >> x)
{
s = ( LinkList) malloc ( sizeof ( LNode) ) ;
s-> data = x;
s-> next = L-> next;
L-> next = s;
if ( cin. get ( ) == '\n' ) break ;
}
return L;
}
LinkList List_TailInsert ( LinkList& L)
{
L = ( LinkList) malloc ( sizeof ( LNode) ) ;
L-> data = 0 ;
L-> next = NULL ;
LNode* s = NULL , * r = NULL ;
r = L;
int x = 0 ;
while ( cin >> x)
{
s = ( LinkList) malloc ( sizeof ( LNode) ) ;
s-> data = x;
r-> next = s;
r = s;
if ( cin. get ( ) == '\n' ) break ;
}
s-> next = NULL ;
return L;
}
LNode* GetElem ( LinkList L, int i)
{
if ( i < 0 ) return NULL ;
int j = 0 ;
LNode* p = L;
while ( p&& j < i)
{
p = p-> next;
j++ ;
}
return p;
}
int main ( void )
{
LinkList L;
InitList ( L) ;
List_TailInsert ( L) ;
cout << "GetElem=" << GetElem ( L, 3 ) -> data << endl;
cout << L << " " << L-> data << " " << L-> next << endl;
cout << L-> next << " " << L-> next-> data << " " << L-> next-> next << endl;
cout << L-> next-> next << " " << L-> next-> next-> data << " " << L-> next-> next-> next << endl;
cout << L-> next-> next-> next << " " << L-> next-> next-> next-> data << " " << L-> next-> next-> next-> next << endl;
ListEmpty ( L) ;
cout << "length=" << ListLength ( L) << endl; ;
return 0 ;
}