算法要求:删除一个单链表L中元素值最大的结点(该结点唯一)
分析:要删除最大值,由于是单链表,故需要单独保留最大值结点的前驱结点
void delmaxnode(LinkNode*& L) {
LinkNode* pre = L, * p = L->next, * maxp = p, * maxpre = pre;
while (p != NULL) {
if (maxp->data < p->data) { //遇到比最大值大的结点,就改变max的相关指针
maxp = p;
maxpre = pre;
}
pre = p;//就正常满足循环条件
p = p->next;
}
maxpre->next = maxp->next;//删除最大值结点
free(maxp);
}
流程:进入循环,实现最大值结点指针的交换,直到找到最大的那个结点,然后利用更新的指针删除该结点。