单链表的插入算法/// bool List::Insert(int i, int& x) { //将新元素x插入到第i个结点之后。i从1开始,i=0表示插入到第一个结点之前。 if(first==NULL || i==0) { //插入空表或非空表第一个结点之前 LinkNode *newNode = new LinkNode(x); //建立一个新结点 if(newNode == NULL) { cerr << "存储分配错误!" << endl; exit(1); } newNode -> link = first; first = newNode; //新结点成为第一个结点 } else { LinkNode *current = first; //从第一个结点开始检测 for(int k=1; k<i; k++) //循链找第i个结点 { if(current == NULL) break; else current = current ->link; } if(current == NULL) //非空表且链太短 { cerr << "无效的插入位置!" << endl; exit(1); } else //插入在链表的中间 { LinkNode *newNode = new LinkNode(x); //建立一个新结点 if(newNode == NULL) { cerr << "存储分配错误!" << endl; exit(1); } newNode -> link = current -> link; current -> link = newNode; } } return true; //正常插入 }; 单链表的删除算法/// bool List::Remove(int i, int& x) { //将链表中的第i个元素删去,i从i开始。 LinkNode *del, *current; if(i <= 1) { del = first; first = first -> link; } else //删第一个结点时重新拉链 { current = first; for(int k=1; k<i-1; k++) //循链找第i-1个结点 { if(current == NULL) break; else current = current -> link; } if(current == NULL || current -> link == NULL) //空表或者链太短 { cerr << "无效的删除位置!" << endl; return false; } del = current -> link; //删中间结点或尾结点时拉链 current -> link = del -> link; } x = del -> data; delete del; //取出被删结点中的数据值 return true; };