(一)、题目
给定两个升序链表,打印两个升序链表的公共部分。
(二)、题目描述
(三)、样例
(四)、备注
(五)、程序代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n =reader.nextInt();
//head1用来标识第一个链表的头节点
Node head1=null;
//temp1用来标识第一个链表的临时节点
Node temp1=null;
for(int i = 0; i < n; i++) {
if(i == 0) {
//对头节点进行初始化
head1 = new Node(reader.nextInt());
temp1 = head1;
continue;
}
//创建新节点
Node newNode = new Node(reader.nextInt());
//设置next节点为新节点
temp1.setNext(newNode);
//迭代为下一个节点
temp1 = temp1.next;
}
//head2用来标识第二个链表的头节点
Node head2=null;
//temp2用来标识第二个链表的临时节点
Node temp2=null;
int m =reader.nextInt();
for(int i = 0; i < m; i++) {
if(i == 0) {
//对头节点进行初始化
head2 = new Node(reader.nextInt());
temp2 = head2;
continue;
}
//创建新节点
Node newNode = new Node(reader.nextInt());
//设置next节点为新节点
temp2.setNext(newNode);
//迭代为下一个节点
temp2 = temp2.next;
}
//同时遍历两个链表
while(head1 != null && head2!=null) {
//如果链表1的当前值小于链表2的当前值
if(head1.data < head2.data) {
//链表1指向下一个节点
head1 = head1.next;
//如果链表2的当前值小于链表1的当前值
}else if(head1.data > head2.data) {
//链表2指向下一个节点
head2 = head2.next;
}else {
//两个链表的当前值相等
System.out.print(head1.data + " ");
//两个链表都指向下一个节点
head1 = head1.next;
head2 = head2.next;
}
}
}
}
//节点类
class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
}
//设置下一个节点
public void setNext(Node next) {
this.next = next;
}
}
(六)、代码思路
首先说明一下这道是在牛客网上oj的题目,我最开始是没有创建节点类Node进行求解的,但是通过率一直为75%,于是才改用书本上的方法,发现通过率还是75%。所以这题大家理解一下思路就好了。也不知道是不是牛客的问题。
- 这题的思路其实并不难,就是创建一个节点类Node来存储每个值,形成一个链表
- 创建完两个链表后,利用while循环同时进行遍历。
- 如果链表1的当前值小于链表2的当前值,那就将链表1指向下一个节点。
- 如果链表2的当前值小于链表1的当前值,那就将链表2指向下一个节点。
- 如果相等的话,就输出当前值,并将链表1和链表2都指向下一个节点。