㈠ 7.試設計實現刪除單鏈表中值相同的多餘結點的演算法
.....做題啊
解:該例可以這樣考慮,先取開始結點的值,將它與其後的所有結點值一一比較,發現相同的就刪除掉,然後再取第二結點的值,重復上述過程直到最後一個結點。
設單鏈表(其類型為LinkList)的頭指針head指向頭結點,則可按下列步驟執行:
首先,用一個指針p指向單鏈表中第一個表結點,然後用另一個指針q查找鏈表中其餘結點元素,由於是單鏈表,故結束條件為p= =NULL,同時讓指針s指向q所指結點的前趨結點,當查找到結點具有q->data= =p->data時刪除q所指的結點,然後再修改q,直到q為空;然後使p指針後移(即p=p->next),重復進行,直到p為空時為止。演算法描述如下:
del(LinkList *head)
{ //刪除單鏈表中值相同的多餘結點
LinkList *p, *s, *q;
p=head->next;
while(p!=NULL && p->next!=NULL)
{ s=p; //s指向要刪除結點的前趨
q=p->next;
while (q!=NULL)
{ if (q->data= =p->data)} //查找值相同的結點並刪除
{ s->next=q->next;
free(q);
q=s->next;
}
else
{ s=q;
q=q->next;
}
}
p=p->next;
}
}