


#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;
}