void split(LinkNode*& L, LinkNode*& L1, LinkNode*& L2) { LinkNode* p, * q, * r; p = L->next; L1 = L; r = L1; L2 = (LinkNode*)malloc(sizeof(ElemType)); L2->next = NULL; while (p != NULL) { r->next = p; r = p; p = p->next; q = NULL; if (p != NULL) { q = p->next; p->next = L2->next; L2->next = p; } } r->next = NULL; }
Delete single largest element in the list L nodes
void delmaxnode(LinkNode*& L) { LinkNode* p, * pre, * max_p, * max_pre; pre = L; p = L->next; max_pre = pre; max_p = p; while (p != NULL) { if (p->data > max_p->data) { max_p = p; max_pre = pre; } pre = pre->next; p = p->next; } max_pre->next = max_p->next; free(max_p); }
Single chain L = a1, b1, a2, b2, a3, b3, split into L = a1, a2, a3, L2 = b3, b2, b1