void InitList(List *list)
{
Node *s = (Node *)malloc(sizeof(Node));//初始化的过程;;
assert(s != NULL);
s->next = NULL;
list->first = list->last = s;
list->size = 0;
}
Node* Find(List *list, ElemType key)
{
Node *p = list->first;
Node *s = p->next; //指针s指向p的下一个节点
while(s!=NULL && s->data!=key)
{
s = s->next;
p = p->next; //指针s往后走的过程中p也往后走;;
}
return p; //返回的p指针即为找到的节点的前驱节点;;
}
void clear(List *list)
{
Node *p = list->first->next;
while(p != NULL)
{
list->first->next = p->next;//先清楚链中的节点;;
free(p); //释放节点信息;;
p = list->first->next; //p再指向第一个节点来释放下一个节点;;
}
list->last = list->first;
list->size = 0;
}
bool delete_val(List *list, ElemType key)
{
Node *p = Find(list,key);
Node *s = p->next;
if(p == NULL)
return false;
p->next = s->next; //相当于使p->next指向p->next->next;;
list->size--;
return true;
}
bool sort(List *list)
{
Node *p = list->first;
Node *q = list->first->next; //这里定义了两个指针一个指前一个指后;;
for(; p!=NULL; p = p->next)
{
for(q = p->next; q!=NULL; q = q->next)//内层循环完成之后找出最大的放在最后 再开始第二次循环;;
{
if(p->next->data > q->data)
{
int temp = p->next->data; //交换的过程;;
p->next->data = q->data;
q->data = temp;
}
}
}
return true;
}
void resver(List *list)
{
Node *p = list->first->next;
Node *s = p->next; //记录断开后的第一个节点位置;;
p->next = NULL; //把第一个节点之后的节点都断开;;
list->last = p;
while(s)
{
p = s; //使p指向s 以方便头插;;
s = s->next;
p->next = list->first->next;//将断开后的节点以头插的方式插入链表
list->first->next = p;
}
}