题目:
给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。
解答:
因为是有序列表,所以从两个链表的头开始进行如下判断:
- 如果head1的值小于head2,那么head1向下移动。
- 如果head1的值大于head2,那么head2向下移动。
- 如果二者的值相等,则打印这个值,然后head1和head2都向下移动。
- head1和head2有任何一个移动到null,整个过程停止。
程序:
public static class Node {
public int value;
public Node next;
public Node(int data) {
this.value = data;
}
}
public static void printCommonPart(Node head1, Node head2) {
System.out.print("Common Part: ");
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.print(head1.value + " ");
head1 = head1.next;
head2 = head2.next;
}
}
System.out.println();
}
public static void printLinkedList(Node node) {
System.out.print("Linked List: ");
while (node != null) {
System.out.print(node.value + " ");
node = node.next;
}
System.out.println();
}