设head指向一个非空单向链表,
①设数据域的值不重复,删除链表中的最大值节点。
②设数据域的值不重复,将最大值节点移动至链表尾部。
③设数据域的值重复,删除关键字值为key的节点。
④设数据域的值重复且升序有序,删除链表中的重复值节点。
⑤将一个无序链表按降序排列。
第一个的代码片段如下:
elemSN * delMaxNode(elemSN *h) {
elemSN *p, *q, *pmax, *qmax;
pmax = h;
qmax = NULL;
for (q = h, p = h->next; p; q = p, p = p->next) {
if (p->data > pmax->data) {
pmax = p;
qmax = q;
}
}
if (pmax - h) qmax->next = pmax->next;
else h = h->next;
return h;
}
第二个代码片段如下:
elemSN * MoveMaxtoTail(elemSN *h) {
elemSN *p, *q, *pmax, *qmax;
pmax = h;
qmax = NULL;
for (q = h, p = h->next; p; q = p, p = p->next) {
if (p->data > pmax->data) {
pmax = p;
qmax = q;
}
}
if (!(pmax - h)) h = h->next;
else qmax->next = pmax->next;
pmax->next = q->next;
q->next = pmax;
return h;
}
第三个代码片段如下:
elemSN * delKeyNode(elemSN *h,int key) {
elemSN *p, *q;
for (p = h; p; q = p, p = p->next) {
if (!(p->data - key))
{
if (p - h) {
q->next = p->next;
free(p);
p = q->next;
}
else {
h = h->next;
free(p);
p = h;
}
}
}
return h;
}