题目:给定两个有序链表的头指针head1和head2,打印两个链表的公共部分
分析:类似于外排
比如:一个链表1->3->5->6->10
另一个链表2->3->6->7
一开始,一个指针指向1,一个指针指向2,谁小动谁。1小,所以第一个指针来到3的位置,然后3和2比,2小,第二个指针来到3的位置,相等的时候打印。然后两个指针共同往下挪一步。逻辑就是谁小谁往右移动。如果相等,则打印,然后共同往右移动。有一个指针到达终点位置,就停下来。
public class PrintCommonPart {
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();
}
public static void main(String[] args) {
Node node1 = new Node(2);
node1.next = new Node(3);
node1.next.next = new Node(5);
node1.next.next.next = new Node(6);
Node node2 = new Node(1);
node2.next = new Node(2);
node2.next.next = new Node(5);
node2.next.next.next = new Node(7);
node2.next.next.next.next = new Node(8);
printLinkedList(node1);
printLinkedList(node2);
printCommonPart(node1, node2);
}
}