天天看點

2021.2.9---每日一題

2021.2.9---每日一題

初始狀态:

2021.2.9---每日一題

代碼及關鍵注釋如下:

void DeleteNode(Lisklsit &L)
{
	LNode*p=L->next,*pre=L,*minp=L->next,*minpre=L;//定義四個指針
	/*
	p指針用來周遊連結清單,minp指針存儲最小值,即當怕掃描到較小的值是minp會指向p,便于删除最小值結點,删除結點(為保證不斷鍊需要知道p和minp的前驅)是以定義pre和minpre兩個指針
	*/
	while(L->next!=L){//因為是反複删除表中最小結點是以L不為空的時候要一直循環
		while(p){//p非空
			if(p->data<minp-data){//如果p指針周遊的值小于minp所指的值
				minp=p;
				minpre=pre;//便于記憶體循環結束後能找到最小值結點的前驅
			}
			else{//若p指針所指結點的值不小于minp指針所指的值
				pre=p;//p及其前驅都向後移動一位
				p=p->next;
			}
			minpre->next=minp->next;//minp的前驅直接與minp的後繼結點連結
			free(minp);//釋放minp所指的值,即删除連結清單中的最小值
		}
	}
}
           

繼續閱讀