C++程序 从未排序的链表中删除重复项

C++程序 从未排序的链表中删除重复项

在数据结构中,链表是一种常见的数据结构。链表的节点包含数据和指向下一个节点的指针。删除链表中的重复项是一个常见的问题。在本文中,我们将介绍如何使用C++编写一个从未排序的链表中删除重复项的程序。

程序设计

首先,我们需要定义链表节点的结构体。

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

接下来,我们需要定义一个函数来删除链表中的重复项。

ListNode* deleteDuplicates(ListNode* head) {
    if (head == NULL || head->next == NULL)
        return head;

    ListNode* p = head;
    while (p->next != NULL) {
        if (p->val == p->next->val) {
            ListNode* temp = p->next;
            p->next = p->next->next;
            delete temp;
        }
        else {
            p = p->next;
        }
    }

    return head;
}

该函数使用一个指针来遍历整个链表。在遍历过程中,如果当前节点的值等于下一个节点的值,则删除下一个节点。

示例

现在,我们来测试一下我们的程序。

int main() {
    ListNode* head = new ListNode(1);
    head->next = new ListNode(1);
    head->next->next = new ListNode(2);
    head->next->next->next = new ListNode(3);
    head->next->next->next->next = new ListNode(3);

    head = deleteDuplicates(head);

    while (head != NULL) {
        cout << head->val << " ";
        head = head->next;
    }
    cout << endl;

    return 0;
}

程序输出如下:

1 2 3

这说明我们的程序成功删除了链表中的重复项。

结论

在本文中,我们介绍了如何使用C++编写一个从未排序的链表中删除重复项的程序。我们定义了链表节点的结构体,并使用一个指针来遍历整个链表。在遍历过程中,如果当前节点的值等于下一个节点的值,则删除下一个节点。通过上述代码示例,我们成功验证了我们的程序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例