题目:
给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。
思路:
- 如果head1的值小于head2,则head1向下移动
- 如果head2的值小于head1,则head2向下移动
- 如果head1和head2的值相等,则打印这个值,然后head1和head2都往下移动。
- head1和head2有任何一个移动到null,则整个过程停止。
代码实现:
public static void printCommonPart(Node head1, Node head2) {
//初始状态 都在链表头部
System.out.println("公共部分为:");
while (head1 != null && head2 != null) {
if (head1.value < head2.value) {
head1 = head1.next;
}else if (head1.value > head2.value) {
head2 = head2.next;
}else {//相等的情况
System.out.println(head1.value + "");
head1 = head1.next;
head2 = head2.next;
}
}
}
测试代码:
public static void main(String[] args) {
Node head1 = new Node(1);
Node node1 = new Node(3);
Node node2 = new Node(4);
Node node4 = new Node(6);
Node node5 = new Node(7);
head1.next = node1;
node1.next = node2;
node2.next = node4;
node4.next = node5;
Node head2 = new Node(2);
Node node3 = new Node(5);
head2.next = node3;
node3.next = node4;
node4.next = node5;
printCommonPart(head1,head2);
}
测试结果: