题目要求:给定两个有序链表的头指针node1和node2,打印两个链表的公共部分。
思路:比较简单,用两个指针从头节点开始遍历,比较两个节点的值,有三种情况
1.如果node1的指针指向的值大于node2的指针指向的值值,将node2的指针指向后一个节点。
2.如果node1的指针指向的值小于node2的指针指向的值值,将node1的指针指向后一个节点。
3.如果node1的指针指向的值等于node2的指针指向的值值,打印节点的值,将node2的指针和node1的指针都指向后一个节点。
该过程在while循环中执行,当两个指针有一个指向空,则退出该while循环
主体代码:
public static void commonPart(LinkNode node1,LinkNode node2){
if (node1==null || node2 == null)
return;
while (node1 != null && node2 != null){
if (node1.value > node2.value){
node2 = node2.next;
}else if (node1.value < node2.value){
node1 = node1.next;
}else {
System.out.println(node1.value);
node1 = node1.next;
node2 = node2.next;
}
}
}
测试代码:
package com.leetCode;
import com.utils.LinkNode;
/**
* @Author Rabindranath Tagore 515783116@qq.com
* @Date 2021/8/27 22:22
*/
public class LinkNodeCommonPart {
public static void main(String[] args) {
LinkNode node1 = new LinkNode(1);
node1.next = new LinkNode(2);
node1.next.next = new LinkNode(5);
LinkNode node2 = new LinkNode(0);
node2.next = new LinkNode(2);
node2.next.next = new LinkNode(3);
node2.next.next.next = new LinkNode(5);
commonPart(node1,node2);
}
public static void commonPart(LinkNode node1,LinkNode node2){
if (node1==null || node2 == null)
return;
while (node1 != null && node2 != null){
if (node1.value > node2.value){
node2 = node2.next;
}else if (node1.value < node2.value){
node1 = node1.next;
}else {
System.out.println(node1.value);
node1 = node1.next;
node2 = node2.next;
}
}
}
}