一.单向链表
代码:
1.创建类节点和链表
class IntSLLNode{
public:
int info;
IntSLLNode* next;
IntSLLNode(){
next = 0;
}
IntSLLNode(int el,IntSLLNode* ptr){
info = el;
next = ptr;
}
};
class IntSLList{
private:
IntSLLNode * head, *tail;
public:
IntSLList()
{
head=tail=0;
}
~IntSLList();
int isEmpty(){
return head == 0;
}
void addToHead(int el);
void addToTail(int el);
...
}
- 从链表头插入addToHead()
void IntSLList::addToHead(int el){
head = new IntSLLNode(el,head);
if(tail == 0){
head = tail;
}
}
3.从链表尾插入addToTail()
void IntSLList::addToTail(int el){
if(tail !=0){
tail->next = new IntSLLNode(el,0);
tail = tail->next;
}
else head = tail = new IntSLLNode(el,0);
}
4.deleteFromHead()
int IntSLList::deleteFromHead(){
if(isEmpty())throw("Empty");
int el = head->info;
IntSLLNode *temp = head;
if(head == tail)//
head = tail = 0;
else head = head->next;
delete temp;
return el;
}
5.deleteFromTail()
int IntSLList::deleteFromTail(){
int el = tail->info;
if (head = tail){
delete head;
head = tail = 0;
}
else{
IntSLLNode *tmp;
for(tmp = head;tmp->next != tail;tmp->next){
delete tail;
tail = tmp;
tail->next = 0;
}
return el;
}
}
6.deleteNode()
IntSLList::deleteNode(int el){
if(head != 0)
if(head==tail&&el == head->info){
delete head;
head = tail = 0;
}
else if(el = head->info){
IntSLLNode *tmp ,*pred;
for(pred = head,tmp=head->next;tmp!=0&&!(tmp->info == el);pred->next,tmp->next);
if(tmp != 0){
pred->next = tmp->next;
if(tmp = tail)
tail = pred;
delete tmp;
}
}
}
二、双向链表
1.在末尾添加一个节点
(1)创建一个新节点,初始化三个数据成员
(2)将el值赋给info
(3)将next成员置为null
(4)将prev成员赋给tail
(5)令tail指向新节点
(6)令前驱节点的next成员指向新节点
2.从末尾删除节点
(1)tail = pre
(2) delete
(3) 新尾结点的next = null
三、循环链表
四、跳跃链表