因为是有序链表,所以处理起来比较方便。从表头分别遍历两个链表就可以了。
如果head1小于head2,那么head1向下移动, 如果head2小于head1,那么head2向下移动。如果相等,就打印出来,两个同时向下移动。一直到有一个出现了NULL。
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct Node {
int data;
struct Node* Next;
Node(int value) :data(value), Next(NULL) { } //这里初始化的时候就直接给data和Next赋值,这样初始是每个点的下一个点就是NULL。
}Node, *pLinkedlist;
void printCommonPart(pLinkedlist head1, pLinkedlist head2)
{
cout << "Common part: " << endl;
while (head1 != NULL && head2 != NULL)
{
if (head1->data < head2->data)
head1 = head1->Next;
else if (head2->data < head1->data)
head2 = head2->Next;
else
{
cout << head1->data << " ";
head1 = head1->Next;
head2 = head2->Next;
}
}
cout << endl;
}
int main()
{
Node *n1 = new Node(1);
Node *n2 = new Node(5);
Node *n3 = new Node(8);
Node *n4 = new Node(9);
Node *n5 = new Node(12);
Node *n6 = new Node(15);
Node *pHead1 = n1;
n1->Next = n2;
n2->Next = n3;
n3->Next = n4;
n4->Next = n5;
n5->Next = n6;
Node *n11 = new Node(3);
Node *n12 = new Node(4);
Node *n13 = new Node(5);
Node *n14 = new Node(7);
Node *n15 = new Node(8);
Node *n16 = new Node(11);
Node *pHead2 = n11;
n11->Next = n12;
n12->Next = n13;
n13->Next = n14;
n14->Next = n15;
n15->Next = n16;
printCommonPart(pHead1, pHead2);
return 0;
}