简单介绍
链表,每个节点离散的分布在内存中,通过next指针将节点进行连接(双向链表多一个指针pre)。由于存在额外的指针,内存空间会比正常存储数据要多一些。
一般结构
单链表节点
struct Node{
TYPE val;
struct Node* next;
};
双向链表节点
struct Node{
TYPE val;
struct Node* pre;
struct Node* next;
};
一般操作
链表的建立
此处讨论的是不包含头指针的链表
头插法
每次新添加的节点都变为头节点。
每次添加一个节点
typedef TYPE int;
Node * insert(Node*head,TYPE val){
Node * p = new Node();
p->val = val;
p->next = head;
return p;
}
一次添加所有
Node * create_head(){
// 头插法
Node * p=NULL;
Node * head = NULL;
int val;
cin >> val;
while(val !=-1){
p = new Node();
p->val = val;
p->next = head;
head = p;
cin >> val;
}
return head;
}
尾插法
每次进来的节点为链表的尾插入到最后。
每次添加一个节点
Node * insert_tail(Node*head,TYPE val){
//尾插法,如果head == NULL 返回 节点 否则返回 NULL