head 頭指針,pf 前驅,pb 當前malloc 分配節點,讀取數據head = pf = pbpf->next = pbpb->next = NULLpf = pbTYPE *search(TYPE *head, int n) {
TYPE *p = head;
while (p->num != n && p->next != NULL)
p = p->next;
if (p->num == n) return p;
if (p->num != n && p->next == NULL)
printf("Node %d not found!\n", n);
return NULL; // 隱式
}
head = pb->next — 頭指針指向第二個節點
pf->next = pb->next — 前驅跳過被刪節點
TYPE *delete(TYPE *head, int num) {
TYPE *pf, *pb;
if (head == NULL) { printf("empty list!\n"); goto end; }
pb = head;
while (pb->num != num && pb->next != NULL) { pf = pb; pb = pb->next; }
if (pb->num == num) {
if (pb == head) head = pb->next;
else pf->next = pb->next;
free(pb); printf("Node deleted\n");
} else printf("Node not found!\n");
end:
return head;
}
head = pi; pi->next = NULLpi->next = pb; head = pipi->next = pb; pf->next = pipb->next = pi; pi->next = NULLTYPE *insert(TYPE *head, TYPE *pi) {
TYPE *pf, *pb = head;
if (head == NULL) { head = pi; pi->next = NULL; }
else {
while (pi->num > pb->num && pb->next != NULL) { pf = pb; pb = pb->next; }
if (pi->num <= pb->num) {
if (head == pb) head = pi;
else pf->next = pi;
pi->next = pb;
} else { pb->next = pi; pi->next = NULL; }
}
return head;
}
| 操作 | 指針變更 |
|---|---|
| 遍歷 | p = p->next |
| 刪除首節點 | head = head->next |
| 刪除中間節點 | prev->next = curr->next |
| 頭部插入 | new->next = head; head = new |
| 中間插入 | new->next = curr; prev->next = new |
掌握這些指針操作模式是熟練實現各類鏈表算法的關鍵。