数据结构
1.链表
(1)链表建立、插入、删除
·建立
Node *L;
L = new Node;
L = NULL;//不带头节点的初始化
L->=NULL;//带头节点的初始化
·头尾插入元素
p->next = L; L=p;//头插法
Node *tail = new Node;//尾插法
Node *cur = L;
while(cur->next!=NULL){
cur = cur->next;
}
tail = cur;
tail->next = p;
p->next= NULL;
·精确插入
bool ListInsert(List *L, int pos, Node *node){
int i = 1;
Node *cur = new Node;
cur = L;
while(cur->next != NULL && i != pos){
cur = cur->next;
i++;
}
if(cur->next = NULL) return false;
else{
node->next = cur->next;
cur->next = node;
return true;
}
}
·精确删除
bool ListDelete(List *L, int pos){
int i = 1;
Node *cur = new Node;
cur = L;
while(cur->next != NULL && i != pos){
cur = cur->next;
i++;
}
if(cur->next = NULL || i>pos) return false;
else{
cur->next = cur->next->next;
delete cur->next
return true;
}
}
(2)链表反转,环
·反转
bool ListReverse(List *L){
Node cur = L->next;
Node *temp = new Node;
while(cur->next!=NULL){
temp = cur;
L->next->next = L;
L->next = temp->next;
cur = L->next;
}
return true;
}
·环
算法的思想是设定两个指针p,q,其中p每次向前移动一步,q每次向前移动两步。那么如果单链表存在环,则p和q相遇;否则q将首先遇到NULL.