中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c語言怎么刪除鏈表中的重復元素

小億
101
2024-01-13 14:40:23
欄目: 編程語言

要刪除鏈表中的重復元素,可以使用雙重循環遍歷鏈表,對于每個節點,再遍歷其后續節點,如果有與當前節點值相同的節點,則刪除該節點。

具體實現如下:

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

// 定義鏈表節點
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 創建鏈表
Node* createList(int* arr, int size) {
    if (size == 0) {
        return NULL;
    }
    Node* head = (Node*)malloc(sizeof(Node));
    head->data = arr[0];
    head->next = NULL;
    Node* p = head;
    int i;
    for (i = 1; i < size; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = arr[i];
        newNode->next = NULL;
        p->next = newNode;
        p = p->next;
    }
    return head;
}

// 打印鏈表
void printList(Node* head) {
    Node* p = head;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

// 刪除鏈表中的重復元素
void removeDuplicates(Node* head) {
    Node* p = head;
    while (p != NULL) {
        Node* q = p;
        while (q->next != NULL) {
            if (q->next->data == p->data) {
                Node* temp = q->next;
                q->next = q->next->next;
                free(temp);
            } else {
                q = q->next;
            }
        }
        p = p->next;
    }
}

int main() {
    int arr[] = {1, 2, 3, 2, 4, 1, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    Node* head = createList(arr, size);
    printf("原始鏈表:");
    printList(head);
    removeDuplicates(head);
    printf("刪除重復元素后的鏈表:");
    printList(head);
    return 0;
}

運行結果:

原始鏈表:1 2 3 2 4 1 5 
刪除重復元素后的鏈表:1 2 3 4 5 

注意:在刪除節點時應釋放內存,防止內存泄漏。

0
红桥区| 桃江县| 张掖市| 宝坻区| 庆云县| 虞城县| 云霄县| 商水县| 白朗县| 贵阳市| 安顺市| 澄城县| 玛多县| 股票| 庆安县| 开原市| 芦山县| 始兴县| 沙田区| 安吉县| 增城市| 易门县| 格尔木市| 顺义区| 泗阳县| 浦北县| 元谋县| 峨边| 区。| 新郑市| 平乐县| 白水县| 南华县| 兴山县| 林州市| 庆元县| 开鲁县| 盐津县| 广丰县| 离岛区| 乾安县|