#include<iostream>#include<cstdio>#include<cstdlib>usingnamespace std;typedefstruct LNode{int data;struct LNode* next;}LNode,*LinkList;//这里LNode 和 *LinkList 等价,只不过LNode更强调一个结点,LinkList更强调一个链表。
LinkList List_HeadInsert(LinkList &L);//头插法建立单链表(逆向建立单链表)
LinkList List_TailInsert(LinkList &L);//尾插法(正向建立单链表)
LNode *GetElem(LinkList L,int i);//按序号查找结点值
LNode *LocateElem(LinkList L,int e);//按值查找表结点boolListInsert(LinkList &L,int i,int e);//在第i个位置插入元素eboolListDelete(LinkList &L,int i,int&e);//按位序删除,并用e带回结点data
LinkList List_HeadInsert(LinkList &L){
LNode *s;int x;
L =(LinkList)malloc(sizeof(LNode));//创建头结点
L->next =NULL;//初始为空链表
cin>>x;//输入结点的值while(x!=9999){//输入9999表示结束
s =(LNode*)malloc(sizeof(LNode));//创建新结点
s -> data = x;
s -> next = L -> next;
L -> next = s;//将新结点插入表中,L为头指针
cin>>x;}return L;}
LinkList List_TailInsert(LinkList &L){int x;
L =(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;//r为表尾指针,指向链表最后一个结点(最后一个结点的next域始终为空)
cin>>x;while(x!=9999){
s =(LNode*)malloc(sizeof(LNode));
s -> data = x;
r -> next = s;
r = s;//尾指针指向新的尾结点
cin>>x;}
r -> next =NULL;return L;}
LNode *GetElem(LinkList L,int i){int j=1;
LNode *p = L -> next;if(i==0){return L;}if(i<1){returnNULL;}while(p && j<i){
p = p -> next;
j++;}return p;}
LNode *LocateElem(LinkList L,int e){
LNode *p = L -> next;while((p !=NULL)&&(p -> data !=e)){
p = p -> next;}return p;}boolListInsert(LinkList &L,int i,int e){if(i<1){returnfalse;}
LNode *p;//指针p指向当前扫描到的结点int j =0;//当前p指向的是第几个结点
p = L;//L指向头结点,头结点是第0个结点(不存数据)while(p !=NULL&& j<i-1){//循环找到第 i-1 个结点
p = p -> next;
j++;}if(p==NULL)//i值不合法{returnfalse;}
LNode *s =(LNode*)malloc(sizeof(LNode));
s -> data = e;
s -> next = p -> next;
p -> next = s;returntrue;}boolListDelete(LinkList &L,int i,int&e){if(i<1)returnfalse;
LNode *p;//指针p指向当前扫描到的结点int j =0;//j表示当前第几个结点
p = L;//L为链表头指针while(p !=NULL&& j<i-1){//循环到要删除的结点的前一个结点
p = p -> next;
j++;}if(p ==NULL)//i值不合法returnfalse;if(p -> next ==NULL)//如果是最后一个结点returnfalse;
LNode *q = p -> next;//令q指向被删除结点
e = q -> data;//用e返回元素的值
p -> next = q -> next;//将*q结点从链中断开free(q);//释放结点的存储空间returntrue;}