91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
奈曼旗| 孟连| 繁昌县| 乌拉特后旗| 井研县| 安阳市| 当涂县| 古丈县| 平安县| 泰兴市| 从化市| 莎车县| 库伦旗| 葫芦岛市| 虞城县| 广元市| 三台县| 嘉义县| 五台县| 长沙市| 白水县| 绍兴市| 清徐县| 祥云县| 兴安县| 儋州市| 明光市| 苏尼特左旗| 建宁县| 历史| 玉溪市| 济宁市| 灵宝市| 馆陶县| 湾仔区| 济阳县| 碌曲县| 开原市| 长沙市| 博乐市| 新平|