题目
给定两个有序单向链表,链表的头指针分别为head1
和head2
,请您找出两个链表的公共部分并输出。
参考答案:
思路
这道理其实挺简单的,因为两个链表都是有序的,所以咱们不放可以从两个链表的头开始,步骤如下:
- 如果
head1
的值小于head2
,则head1
往下移动; - 如果
head2
的值小于head1
,则head2
往下移动; - 如果
head1
和head2
的值相等,则打印这个值,然后head1
和head2
都往下移动; head1
或者head2
有任何一个节点移动到null,则整个过程就结束了。
java
代码实现
//链表节点
public class Node {
//当前节点值
public int value;
//指向的下一个节点
public Node next;
public Node(int value) {
this.value = value;
}
}
/**
* @author java后端技术栈
* @date 2019/8/17
*/
public class FindListCommon {
private static void findCommon(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.print(head1.value);
System.out.print(" ");
head1 = head1.next;
head2 = head2.next;
}
}
System.out.println();
System.out.println("查找完毕");
}
public static void main(String[] args) {
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
//构建一个链表,顺序为:0 1 2 4 5 6
Node head1 = new Node(0);
head1.next = node1;
node1.next = node2;
node2.next = node4;
node4.next = node5;
node5.next = node6;
Node node11 = new Node(1);
Node node22 = new Node(2);
Node node33 = new Node(3);
Node node55 = new Node(5);
Node node66 = new Node(6);
//构建一个链表,顺序为:0 1 2 3 5 6
Node head2 = new Node(0);
head2.next = node11;
node11.next = node22;
node22.next = node33;
node33.next = node55;
node55.next = node66;
findCommon(head1, head2);
}
}
输出:
开始查找:
0 1 2 5 6
查找完毕
很简单吧,此题解答完毕!想到很多人都是手机端阅读,代码截图:
核心方法:
构建第一个有序链表,链表的头尾head1:
构建第二个有序链表,链表的头尾head2并调用核心查找方法:
关键词
链表,单向,有序,相等就打印,把自己指向自己的下一个节点