#include
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x): val(x), next(NULL){}
};
void My_Printf(ListNode* L)
{
cout << "List is: ";
ListNode* cur = L;
while (cur)
{
cout << cur->val << "->";
cur = cur->next;
}
cout << endl;
}
ListNode* Difference(ListNode* head1, ListNode* head2)
{
ListNode* dummyhead = new ListNode(0);
ListNode* cur = dummyhead;
cur->next = head1;
while (head1 && head2)
{
if (head1->val == head2->val)
{
cur->next = head1->next;
delete head1;
head1 = cur->next;
head2 = head2->next;
}
else if (head1->val < head2->val)
{
cur->next = head1;
head1 = head1->next;
cur = cur->next;
}
else
{
head2 = head2->next;
}
}
if (head1)
{
cur->next = head1;
}
return dummyhead->next;
}
int main()
{
ListNode* n1 = new ListNode(5);
ListNode* n2 = new ListNode(15);
ListNode* n3 = new ListNode(20);
ListNode* n4 = new ListNode(35);
ListNode* n5 = new ListNode(45);
ListNode* n6 = new ListNode(50);
ListNode* m1 = new ListNode(15);
ListNode* m2 = new ListNode(35);
ListNode* m3 = new ListNode(50);
ListNode* m4 = new ListNode(55);
n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = n6;
m1->next = m2;
m2->next = m3;
m3->next = m4;
My_Printf(n1);
My_Printf(m1);
ListNode* node = Difference(n1, m1);
My_Printf(node);
}