【题目】
给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。
【解答】
因为是有序链表,所以从两个链表的头开始进行如下判断:
- 如果head1的值小于head2,则head1往下移动。
- 如果head2的值小于head1,则head2往下移动。
- 如果head1的值与head2的值相等,则打印这个值,然后head1和head2都往下移动。
- head1和head2有任何一个移动到null,则整个过程停止。
【代码实现】
#include<iostream>
struct Node
{
int value;
Node *next;
Node(int data){
value = data;
}
};
static void printCommonPart(Node *head1, Node *head2){
std::cout << "Common Part: " << std::endl;
while (head1 != nullptr && head2 != nullptr){
if (head1->value < head2->value){
head1 = head1->next;
}
else if (head1->value > head2->value)
{
head2 = head2->next;
}
else
{
std::cout << head1->value << " ";
head1 = head1->next;
head2 = head2->next;
}
}
std::cout << std::endl;
}
【来源】
《程序员代码面试指南(IT名企算法与数据结构题目最优解)》左程云