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