首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >查找两个链表相同部分【面试题】

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

作者头像
田维常
发布2019-08-21 18:00:40
发布2019-08-21 18:00:40
1.3K0
举报

题目

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

参考答案:

思路

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

  • 如果head1的值小于head2,则head1往下移动;
  • 如果head2的值小于head1,则head2往下移动;
  • 如果head1head2的值相等,则打印这个值,然后head1head2都往下移动;
  • head1或者head2有任何一个节点移动到null,则整个过程就结束了。
java代码实现
代码语言:javascript
复制
//链表节点
public class Node {
    //当前节点值
    public int value;
    //指向的下一个节点
    public Node next;

    public Node(int value) {
        this.value = value;
    }
}
代码语言:javascript
复制
/**
 * @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);
    }
}

输出:

代码语言:javascript
复制
开始查找:
0 1 2 5 6
查找完毕

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

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

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

关键词

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

【文章汇总】面试篇

【文章汇总】Java基础篇

【文章汇总】性能调优篇

【文章汇总】设计模式篇

【文 章 汇 总】Spring家族篇

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 参考答案:
    • 思路
    • java代码实现
    • 关键词
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档