选出两个有序链表中的(交集)相等元素(C++)

#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* Intersection(ListNode* head1, ListNode* head2)
{
    ListNode* dummyhead = new ListNode(0);
    ListNode *cur = dummyhead;
    cur->next = head1;
    
    while (head1 && head2)
    {
        if (head1->val == head2->val)
        {
            cur = cur->next;
            head1 = head1->next;
            head2 = head2->next;
        }
        else if (head1->val < head2->val)
        {
            cur->next = head1->next;
            delete head1;
            head1 = cur->next;
        }
        else
        {
            head2 = head2->next;
        }
        
    }
    
    if (head1)
    {
        cur->next = NULL;
    }
    
    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 = Intersection(n1, m1);
    My_Printf(node);
}

你可能感兴趣的:(选出两个有序链表中的(交集)相等元素(C++))