带尾结点指针的单循环链表结构
typedef int elementType;
typedef struct LinkedList{
elementType data;
struct LinkedList* next;
}node;
带尾结点指针的单循环链表初始化
void initialList(node *&R){
R = new node;
R->next = R;
}
求表长度
int listLength(node* R){
int len = 0;
node* p = R->next->next;
while (p != R->next){
len++;
p = p->next;
}
return len;
}
插入操作
int listInsert(node *R, int i, elementType x){
node* p, *S;
int k = 0;
p = R->next;
while (k != i-1 && p->next != R->next){
k++;
p = p->next;
}
if (k != i-1){
return false;
}
else{
S = new node;
S->data = x;
S->next = p->next;
p->next = S;
if (R->next == S)
R = S;
return true;
}
}
删除操作
bool listDelete(node *&R, int i, elementType &x){
node* p = R->next;
node* u;
int k = 0;
while (k != i-1 && p->next != R->next){
k++;
p = p->next;
}
if (p->next == R->next)
return false;
else{
u = p->next;
p = u->next;
x = u->data;
if (R == u)
u = p;
delete u;
return true;
}
}
将A、B两个带尾指针的单循环链表首 尾相接,尽量节省时间
void scrMergeAB(node *&A, node *&B){
node* u;
u = A->next;
A->next = B->next->next;
delete B->next;
B->next = u;
A = B;
}