删除链表中重复元素

来源:互联网 发布:二建做题软件哪个好 编辑:程序博客网 时间:2024/05/22 12:59
//删除链表中重复的元素//比如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;elsepre->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;}

                                             
0 0
原创粉丝点击