首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言鏈表查找、刪除、插入算法詳解與指針操作圖解

     編輯:關於C語言

創建鏈表 creat 算法解析

  • 三指針:head 頭指針,pf 前驅,pb 當前
  • 循環 malloc 分配節點,讀取數據
  • 首節點:head = pf = pb
  • 後續節點:pf->next = pb
  • 尾節點:pb->next = NULL
  • 遞進:pf = pb

查找節點 search

TYPE *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; // 隱式
}

刪除節點 delete 兩種情況

1. 刪除首節點

head = pb->next — 頭指針指向第二個節點

2. 刪除非首節點

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;
}

插入節點 insert 四種情況

  1. 空表:head = pi; pi->next = NULL
  2. 插入頭部:pi->next = pb; head = pi
  3. 中間插入:pi->next = pb; pf->next = pi
  4. 尾部插入:pb->next = pi; pi->next = NULL

統一邏輯代碼

TYPE *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

掌握這些指針操作模式是熟練實現各類鏈表算法的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved