题目:
//给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。
//思路:
//因为是有序表,所以从两个链表的头开始进行如下判断:
//如果head1->value < head2->value 则head1向下移动。
//如果head2->value < head1->value 则head2向下移动。
//如果head1->value == head2->value 则打印出这个value,head1和head2一起向下移动。
//head1和head2任何一个为空,则停止移动。
#include <iostream>
using namespace std ;
#include <cassert>
struct Node
{
int value;
struct Node * Next;
Node(int data):value(data),Next(NULL) { }
};
void PrintCommonPart(Node *pHead1, Node *pHead2)
{
assert(pHead1 && pHead2);
Node *pCur1 = pHead1;
Node *pCur2 = pHead2;
while (pCur1 != NULL && pCur2 != NULL)
{
if (pCur1->value < pCur2->value)
{
pCur1 = pCur1->Next;
}
else if (pCur1->value > pCur2->value)
{
pCur2 = pCur2->Next;
}
else
{
cout << pCur2->value << " ";
pCur1 = pCur1->Next;
pCur2 = pCur2->Next;
}
}
}
int main5()
{
//这里只是单纯的分配节点,不释放节点,要不然篇幅太长了。毕竟节点的分配和释放不是重点。
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(9);
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);
cout << "hello..." <<endl;
system("pause");
return 0;
}