程序员代码面试指南第二版 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.打印两个升序链表的公共部分的主要内容,如果未能解决你的问题,请参考以下文章
程序员代码面试指南第二版 11.可见的山峰对数量(普通和进阶)
左神算法书籍《程序员代码面试指南》——2_12将搜索二叉树转换成双向链表