题目
给定两个有序单向链表,链表的头指针分别为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并调用核心查找方法:

关键词
链表,单向,有序,相等就打印,把自己指向自己的下一个节点
 











