描述
给定两个升序链表,打印两个升序链表的公共部分。
输入描述:
第一个链表的长度为 n。
第二个链表的长度为 m。
链表结点的值为 val。
第二个链表的长度为 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) { Scanner sc = new Scanner(System.in); sc.nextLine(); StringBuilder sb = new StringBuilder(); String[] strArr = sc.nextLine().split(" "); Node node1 = Node.trans(strArr); sc.nextLine(); String[] strArr2 = sc.nextLine().split(" "); Node node2 = Node.trans(strArr2); printCommonPart(node1,node2); } public static void printCommonPart(Node head1,Node head2) { 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; } } } } class Node { public int value; public Node next; public Node(int data) { this.value = data; } 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; } }