//删除链表中重复的元素
//比如1 2 3 3 4 4
//删除重复元素变为1 2
#include <iostream>
using namespace std;
struct Node
{
Node(int x)
{
value = x;
next = NULL;
}
int value;
Node *next;
};
void deleteDuplication(Node **head)
{
if (head == NULL || *head == NULL)
return;
Node *pre = NULL;//当前节点前面的那个不重复节点,比如2就是一个不重复节点
Node *cur = *head;
while (cur)
{
bool needDelete = false;
if (cur->next && cur->value == cur->next->value)
needDelete = true;
if (!needDelete)//出现了不重复的节点
{
pre = cur;
cur = cur->next;
}
else
{
int value = cur->value;
Node *pNext = NULL;//这里不能直接pNext=cur->next,因为cur有可能为空
while (cur && cur->value == value)
{
pNext = cur->next;//保留cur的下一个节点
delete cur;
cur = pNext;
}
if (pre == NULL)//说明还没出现不重复的节点
*head = cur;
else
pre->next = cur;//将不重复的节点连接到当前节点
}
}
}
void print(Node *head)
{
while (head)
{
cout << head->value << " ";
head = head->next;
}
cout << endl;
}
int main()
{
Node *p1 = new Node(1);
Node *p2 = new Node(2);
Node *p3 = new Node(3);
Node *p4 = new Node(3);
Node *p5 = new Node(4);
Node *p6 = new Node(4);
p1->next = p2;
p2->next = p3;
p3->next = p4;
p4->next = p5;
p5->next = p6;
print(p1);
deleteDuplication(&p1);
print(p1);
return 0;
}
删除链表中重复元素
最新推荐文章于 2024-02-16 11:03:36 发布