#include<iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode , *LinkList; LNode *p,*q; LinkList H; //求链表的长度 int ListLength(LinkList L) { p = L; int k = 0; while(p){ k++; p = p->next; } return k; } // 查找元素操作 LNode *Locate(LinkList L,int e) //e's type is int { //在L所指链表中查找第一个值和e相等的元素,若存在,则返回 //它在链表中的位置,即指向该数据的元素所在节点的指针,否则返回NULL p = L; //用指针的方法代替下标,需要用一个节点类型的指针替换一下,以便操作 while(p && p->data != e) p = p->next; return p; } //插入节点操作(前插) void Insert (LinkList &L,LNode *p,LNode *s) { //指针p指向L为头节点的链表中某个节点,将s节点插入到p节点之前 if (p == L){ s->next = L; L = s; } else { q = L; while( q->next !=p ) q = q->next;//迭代查找 q->next = s; s->next = p; } } //删除节点的操作 void Delete(LinkList &L,LNode *p,int e) { //p 指向链表中的某一个节点,从链表中删除该节点并由e返回该节点的值 if( p == L) //L 就代表头节点 { L = p->next; }else{ q = L; while(q->next != p)q = q->next; //p,q 都是地址,且p-〉next也是地址 q->next = p->next; } e = p->data; delete p; }