链表1

来源:互联网 发布:淘宝阿尔法下载 编辑:程序博客网 时间:2024/06/05 04:17

设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;elseh = 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;}