117.info
人生若只如初见

c语言怎么删除链表中的重复元素

要删除链表中的重复元素,可以使用双重循环遍历链表,对于每个节点,再遍历其后续节点,如果有与当前节点值相同的节点,则删除该节点。

具体实现如下:

#include 
#include 

// 定义链表节点
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 = https://www.yisu.com/ask/arr[0];>next = NULL;
    Node* p = head;
    int i;
    for (i = 1; i < size; i++) {
        Node* newNode = (Node*)malloc(sizeof(Node));
        newNode->data = https://www.yisu.com/ask/arr[i];>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 =https://www.yisu.com/ask/= 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 

注意:在删除节点时应释放内存,防止内存泄漏。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fee60AzsLAAReDFU.html

推荐文章

  • ​c语言如何修改button的位置

    在C语言中,要修改按钮的位置,需要使用相应的库来绘制图形界面。常用的库包括Windows API、GTK+、Qt等。
    以使用Windows API为例,可以按照以下步骤来修改按...

  • c语言button的用法是什么

    在C语言中,button是指用于处理和控制用户界面的按钮。一个按钮可以被点击,以触发相关的操作或事件。
    要在C语言中使用按钮,需要以下步骤: 首先,需要导入...

  • c语言中的ifdef有什么作用

    在C语言中,#ifdef是一个条件编译指令,用于在编译时根据预定义的宏来判断是否包含或排除特定的代码段。它的作用主要有以下几个方面: 实现跨平台编译:通过在不...

  • C语言创建对象的方式有哪几种

    在C语言中,没有直接的方式来创建对象。因为C语言是一种过程性的语言,没有面向对象的特性。然而,可以通过以下几种方式来模拟对象的创建: 结构体:使用结构体来...

  • docker部署mysql的好处有哪些

    隔离性:Docker提供了容器化部署的能力,使得每个容器都可以拥有独立的运行环境,包括操作系统和软件依赖。这样就可以在同一台主机上运行多个不同版本的MySQL实例...

  • springboot依赖不能导入怎么解决

    当遇到Spring Boot依赖无法导入的问题时,你可以尝试以下几个解决方法:1. 检查依赖坐标:首先确保你在`pom.xml`文件(如果是Maven项目)或`build.gradle`文件(...

  • python怎么调用api爬取数据

    要调用 API 爬取数据,可以使用 Python 的 requests 库发送 HTTP 请求,并解析返回的数据。以下是一个简单的示例:
    import requests # 发送 GET 请求,获取...

  • plsql怎么查询操作记录

    在PL/SQL中,您可以使用SELECT语句来查询操作记录。以下是一个示例:
    DECLARE -- 定义变量用于存储查询结果 v_id NUMBER; v_name VARCHAR2(50);
    BEGIN...