1. 程式人生 > >單鏈表結點刪除 C語言實現

單鏈表結點刪除 C語言實現

實現程式碼:

#include<stdlib.h>
#include<stdio.h>

#define N 15

typedef struct linklist
{
    int data;
    struct linklist *next;
}list, *plist;

/*建立連結串列*/
void create_list(plist* head)
{
    int i;
    if (NULL == *head)/*若頭為空,插入第一個元素1*/
    {
        plist phead = (plist)malloc(sizeof(list
)); phead->data = 1; phead->next = NULL; *head = phead; } for (i = 2; i < N + 1; i++)/*插入資料2~15*/ { plist p = (plist)malloc(sizeof(list)); p->data = i; p->next = *head; *head = p; } } /*列印輸出*/ void print_list(plist head) { plist p =
head; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } /*刪除結點*/ void delete_node(plist* head, int num) { plist elem = *head; plist temp = NULL; if (elem->data == num) { *head = elem->next; free(elem); return
; } else { while (elem != NULL) { temp = elem; elem = elem->next; if (NULL == elem) { printf("\n------------未找到要刪除的結點----------------\n\n"); return; } else if (elem->data == num)/*找到data值為num的結點*/ { temp->next = elem->next; /*elem前一個結點的next指向elem元素後一個結點*/ free(elem);/*釋放被刪除的結點佔用的空間*/ break; } } } } void main() { int num; plist head; head = NULL; create_list(&head); printf("請輸入要刪除的結點(1~15):\n"); scanf("%d", &num); printf("刪除結點之前:\n"); print_list(head); delete_node(&head, num); printf("刪除結點之後:\n"); print_list(head); system("pause"); }

這裡寫圖片描述