#include"LinkList.h"voidInitList(LinkList& first){
first = new ListNode;
first->link =NULL;}/创建voidcreateListF(LinkList first){char ch;
LinkList r, p;
r =first;
r->link =NULL;while((ch =getchar())!='\n'){
p = new ListNode;//建立新结点
p->data = ch;
p->link =NULL;
r->link =p;//插入到表前端
r=p;}}打印voidPrint(LinkList& first){
ListNode* p = first->link;for(; p; p = p->link)printf("%c", p->data);printf("\n");}/求长度intLength(const LinkList first){const ListNode* p;
p= first->link;//检测指针 p 跳过表头结点指示第 1 号结点int count =0;while(p ){//逐个结点计数
p = p->link; count++;}return count;}voidFree(ListNode* first){while(first){
ListNode* p = first->link;
delete first;
first = p;}}
bool Find(const ListNode* first, ElemType x){const ListNode* p=first->link;for(p = first->link; p &&(p->data != x); p = p->link);return p !=NULL;//????}/插入
ListNode*Locate(LinkList first,int i){//返回表中第 i 个元素的地址, 表头结点为 0 号if(i <0)returnNULL;// i 值不合理
ListNode* p = first;int k =0;while(p !=NULL&& k < i){
p = p->link; k++;}//找第 i 个结点 return p;//当返回地址非空则为第 i 个结点地址//否则返回NULL}
bool Insert(LinkList first, ElemType x,int i){//将新元素 x 插入在链表中第 i (1≤i) 号结点位置
ListNode* p =Locate(first, i -1);if(p ==NULL)return0;//不插入
ListNode* newNode = new ListNode;
newNode->data = x;//创建新结点
newNode->link = p->link;//链入
p->link = newNode;return1;//插入成功,函数返回1}/删除
bool Delete(LinkList first,int i, ElemType& x){//将链表第 i 号元素删去, 通过 x 返回
ListNode* p =Locate(first, i -1);//寻找被删结点的前驱结点if(p ==NULL|| p->link ==NULL)return0;
ListNode* q = p->link;//被删结点地址
p->link = q->link;//摘下被删结点
x = q->data; delete q;//释放return1;}
main函数:
#include"LinkList.h"voidmain(){
LinkList first;InitList(first);createListF(first);//Input(first);Print(first);printf("Length: %d\n",Length(first));if(Find(first,'b'))printf("Find %c successfully.\n",'b');elseprintf("Find b failed.\n");
bool ret =Insert(first,'e',2);if(ret)printf("Insert %c in %d successfully.\n",'e',2);elseprintf("Insert %c in %d failed.\n",'e',2);Print(first);char c;
ret =Delete(first,2, c);if(ret)printf("Delete item at %d(%c) successfully.\n",2, c);elseprintf("Delete item at %d failed.\n",2);Print(first);Free(first);}