0
点赞
收藏
分享

微信扫一扫

查找两个链表相同部分【面试题】


题目

给定两个有序单向链表,链表的头指针分别为head1head2,请您找出两个链表的公共部分并输出。

参考答案:

思路

这道理其实挺简单的,因为两个链表都是有序的,所以咱们不放可以从两个链表的头开始,步骤如下:

  • 如果head1的值小于head2,则head1往下移动;
  • 如果head2的值小于head1,则head2往下移动;
  • 如果head1head2的值相等,则打印这个值,然后head1head2都往下移动;
  • 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
查找完毕

很简单吧,此题解答完毕!想到很多人都是手机端阅读,代码截图:
核心方法:

查找两个链表相同部分【面试题】_System

构建第一个有序链表,链表的头尾head1:

查找两个链表相同部分【面试题】_链表_02

构建第二个有序链表,链表的头尾head2并调用核心查找方法:

查找两个链表相同部分【面试题】_System_03

关键词

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


查找两个链表相同部分【面试题】_链表_04

举报

相关推荐

0 条评论