程序员代码面试指南第二版 12.打印两个升序链表的公共部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员代码面试指南第二版 12.打印两个升序链表的公共部分相关的知识,希望对你有一定的参考价值。


​welcome to my blog​

程序员代码面试指南第二版 12.打印两个升序链表的公共部分

题目描述

题目描述
给定两个升序链表,打印两个升序链表的公共部分。

输入描述:
第一个链表的长度为 n。

第二个链表的长度为 m。

链表结点的值为 val。

输出描述:
输出一行整数表示两个升序链表的公共部分的值 (按升序输出)。

示例1

输入
4
1 2 3 4
5
1 2 3 5 6

输出
1 2 3

第一次做; 核心:两个指针p1,p2分别指向两个链表的开头, 谁小移动谁; p1.val<p2.val则p1向下移动一个, p1.val>p2.val则p2向下移动一下, p1.val==p2.val则打印val并且p1,p2都向下移动一下

import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
ListNode head1 = new ListNode(0);
String[] str = sc.nextLine().split(" ");
ListNode curr = head1;
for(int i=0; i<n; i++)
curr.next = new ListNode(Integer.parseInt(str[i]));
//update
curr = curr.next;

ListNode head2 = new ListNode(0);
curr = head2;
int m = Integer.parseInt(sc.nextLine());
str = sc.nextLine().split(" ");
for(int i=0; i<m; i++)
curr.next = new ListNode(Integer.parseInt(str[i]));
//update
curr = curr.next;

//开始找链表的公共部分
ListNode p1 = head1.next, p2 = head2.next;
while(p1!=null && p2!=null)
if(p1.val < p2.val)
p1 = p1.next;
else if(p1.val > p2.val)
p2 = p2.next;
else
System.out.print(p1.val+" ");
p1 = p1.next;
p2 = p2.next;



public static class ListNode
int val;
ListNode next = null;
ListNode(int val)
this.val = val;



以上是关于程序员代码面试指南第二版 12.打印两个升序链表的公共部分的主要内容,如果未能解决你的问题,请参考以下文章

程序员代码面试指南第二版 156.设计LRU缓存结构

链表相关面试题第二篇

程序员代码面试指南第二版 11.可见的山峰对数量(普通和进阶)

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表

[程序员代码面试指南]链表问题-单链表的选择排序(选择排序)

左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表★★