删除两个双向链表中重复元素

来源:互联网 发布:对电影台词软件 编辑:程序博客网 时间:2024/05/16 02:23
#include <iostream>using namespace std;//删除两个链表中的重复数据typedef struct node{    int data;    struct node *front, *next;}Node;void output(Node *head){    Node *p = head;    while(p->next != head)    {        p = p->next;        cout << p->data << " ";    }    cout << endl;}//构造一个双链表Node* createLink(int* a, int len){    Node *pHeadA = new Node;    Node *p;    pHeadA->data = 0xffffffff;    pHeadA->next = pHeadA;    pHeadA->front = pHeadA;    p = pHeadA;    for(int i = 0; i < len; ++i)    {        Node *p1 = new Node;        p1->data = a[i];        p->next = p1;        p1->front = p;        pHeadA->front = p1;        p1->next = pHeadA;        p = p1;    }    return pHeadA;}//删除指定的结点Node* removeNode(Node* p){    Node *pPrevious = p->front;    Node *pNext = p->next;    pPrevious->next = pNext;    pNext->front = pPrevious;    delete p;    return pPrevious;}//找到要删除的结点bool findRemoveNode(Node* head, int data){    Node *p = head;    bool flag = false;    while(p->next != head)    {        p = p->next;        if(p->data == data)        {            p = removeNode(p);            flag = true;        }    }    return flag;}//删除重复结点void DeleteSameNodes(Node* pHeadA, node* pHeadB){    Node *pA = pHeadA;    Node *pAPre;    while(pA->next != pHeadA)    {        pAPre = pA;        pA = pA->next;        int Adata = pA->data;        int flag = findRemoveNode(pHeadB, Adata);        if(flag)        {            //在B中重复的结点,那么A中的结点也要都删去            findRemoveNode(pHeadA, Adata);//注意会引起A中pA失效            pA =  pAPre;//重定位指针        }    }}int main(){    cout << "删除前:"<<endl;    //创建A链表    int a[6] = {1,2,3,2,4,3};    Node* pHeadA = createLink(a, 6);    cout << "A链表中的元素为:";    output(pHeadA);    //创建B链表    int b[4] = {0,2,4,2};    Node* pHeadB = createLink(b, 4);    cout << "B链表中的元素为:";    output(pHeadB);    //删除两个链表中重复的值,题意不是很清楚,这里理解为若B中与A有相同的元素data,    //则A与B中所有含data的结点都要删去,而若B中没有相同的data,那么即使A内部有多    //个data,也不删除。    cout <<endl<< "删除后:"<< endl;    DeleteSameNodes(pHeadA, pHeadB);    cout << "A链表中的元素为:";    output(pHeadA);    cout << "B链表中的元素为:";    output(pHeadB);    return 0;}

0 0
原创粉丝点击