可以說,我有一個單鏈表,里面有 5 個元素。如果我洗掉具有這種特定情況的元素,我將如何調整串列大小 -
我的單鏈表定義為0->1->2->3->4,其中這些數字是串列的索引。假設我有一個函式,f()它直接在索引 2 處回傳一個指標。從這里,我想洗掉 2,但不知道如何將 1 連接到 3。我該怎么做?
uj5u.com熱心網友回復:
對于“單鏈”串列,您需要維護串列中“下一個”專案的資料結構。
如果在您的情況下(似乎您是)被限制使用回傳指向此鏈接的指標的函式,那么您可以回圈并相應地洗掉。
例如:
struct link *f(struct link *head) {
// Do work...
// is found struct link *target
return target;
}
struct link *delete_link(struct link *head, struct link *target) {
if (head == target) {
struct link *tmp = head;
struct link *new_head = tmp->next;
return new_head;
}
struct link *curr = head;
while (curr->next != target) {
struct link *tmp = curr;
curr = curr->next;
}
curr->next = target->next
free(target);
return head;
}
int main(int argc, char *argv[])
{
struct link {
// data
struct link *next;
};
// Construct list....
struct link *head = construct_list(1, 2, 3, 4);
// Do stuff...
struct link *target = f(list);
// Found a deletion target...
head = delete_link(target);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530133.html
標籤:C指针链表
