#include "stdafx.h" #include <iostream> using namespace std; struct Node // 节点的定义 { int data; Node* front, *next; }; struct List // 双向链表A { List(int a = 1) // construtcton A : data(0) , head(NULL) , tail(NULL) { if(head == NULL) // 如果链表为空 创建链头 { head = new Node; head->data = 9999; head->front = NULL; head->next = NULL; tail = head; } if(a) { for(int i= 0; i<10; ++i) { Node* node = new Node; node->data = i; node->front = NULL; node->next = NULL; insertData(node); } } else { for(int i= 3; i<10; ++i) { Node* node = new Node; node->data = i; node->front = NULL; node->next = NULL; insertData(node); } } } // tail->1<->2<->3<->4->NULL void insertData(Node* node) { tail->next = node; node->front = tail; tail = tail->next; } Node* getListHead() { return head; } Node* getFirstNode() { return head->next; } Node* getLastNode() { return tail->front; } bool deleteNode(Node* node) { bool bHave = false; Node* tmpTail = head; Node* tmpNext = head->next; while(tmpNext != NULL) // 遍历链表 { if(tmpNext->data == node->data) // 删除链表中对应节点 { tmpTail->next = tmpNext->next; if(tmpNext->next != NULL) // 如果没有到链表末尾 { tmpNext->next->front = tmpTail; tmpTail = tmpNext->next; } bHave = true; } // end if // 1->2->3->4->5->6->7 tmpTail = tmpNext; tmpNext = tmpNext->next; } // end while return bHave; } int data; Node* head; Node* tail; }; int main() { List ListA(0); Node* na = ListA.getListHead(); List ListB; // 查找如果有相同的元素则删除 listA->listB while(na != NULL) { ListB.deleteNode(na); Node* nb_out = ListB.getFirstNode(); while(nb_out && nb_out->next != NULL) { cout<<nb_out->data<<endl; nb_out = nb_out->next; } cout<<"*******"<<endl; na = na->next; } // 输出链表A,B的值 cout<<"- - - -"<<endl; Node* na_out = ListA.getFirstNode(); while(na_out != NULL) { cout<<na_out->data<<endl; na_out = na_out->next; } cout<<"- - - -"<<endl; Node* nb_out = ListB.getFirstNode(); while(nb_out != NULL) { cout<<nb_out->data<<endl; nb_out = nb_out->next; } getchar(); }