节点类(包含测试方法)
/*
*打印两个有序链表的公共部分
*
* 解题思路
* 如果head1的值小于head2的值,head1往下移动
* 如果head2的值小于head1的值,head2往下移动
* 如果head1的值等于head2的值,则打印这个值,head1和head2都往下移动
* head1和head2有一个为空,则停止
*/
public 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.println("Common part: ");
//head1和head2有一个为空,则停止
while (head1 != null && head2 != null) {
//如果head1的值小于head2的值,head1往下移动
if (head1.value < head2.value)
head1 = head1.next;
//如果head2的值小于head1的值,head2往下移动
else if (head2.value < head1.value)
head2 = head2.next;
//如果head1的值等于head2的值,则打印这个值,head1和head2都往下移动
else {
System.out.print(head1.value + " ");
head1 = head1.next;
head2 = head2.next;
}
}
}
public static void main(String[] args) {
//创建两个有序链表
MyLinkedList list1 = new MyLinkedList();
MyLinkedList list2 = new MyLinkedList();
//有序链表一 12345
list1.addNode(1);
list1.addNode(2);
list1.addNode(3);
list1.addNode(4);
list1.addNode(5);
//有序链表二 02456
list2.addNode(0);
list2.addNode(2);
list2.addNode(4);
list2.addNode(5);
list2.addNode(6);
//查找公共部分
printCommonPart(list1.head, list2.head);//输出结果为245
}
}
链表类(只完成了添加功能)
``/**
* 构建一个只有添加功能的链表类
* 思路:
* 找到链表的末尾结点,把新添加的数据作为末尾结点的后续结点
*/
public class MyLinkedList {
Node head;
public void addNode(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
return;
}
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
}
}