描述
给定两个升序链表,打印两个升序链表的公共部分。
输入描述:
第一个链表的长度为 n。
第二个链表的长度为 m。
链表结点的值为 val。
输出描述:
输出一行整数表示两个升序链表的公共部分的值 (按升序输出)。
示例1
输入:
4
1 2 3 4
5
1 2 3 5 6
输出:
1 2 3
解题思路
就是两条链表简单的比较,定义一个打印公共部分的方法:
node1的值等于node2的值,打印出来,同时两个链表的指针下移一位。
node1的值小于node2的值,打印出来,同时node1的指针下移一位。
node1的值大于node2的值,打印出来,同时node2的指针下移一位。
实现步骤:
定义一个结点Node,有value,有next
定义一个数组转链表的方法。
再定义一个打印公共部分的方法,将两个链表传进来。
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Node node1;
Node node2;
Scanner in=new Scanner(System.in);
in.nextLine();
StringBuilder res = new StringBuilder();
String[] strArr = in.nextLine().split(" ");
node1=Node.trans(strArr);
in.nextLine();
String[] strArr2 = in.nextLine().split(" ");
node2=Node.trans(strArr2);
printCommonPart(node1,node2);
//System.out.print(res);
}
public static void printCommonPart(Node head1,Node head2){
//System.out.print("公共部分:");
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+" ");
head1=head1.next;
head2=head2.next;
}
}
System.out.println();
}
}
class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
public static Node trans(String[] nums) {
Node head = new Node(Integer.parseInt(nums[0]));
Node cur = head;
for(int i = 1; i < nums.length; i++) {
cur.next = new Node(Integer.parseInt(nums[i]));
cur = cur.next;
}
return head;
}
}