java 打印两个有序链表的公共部分

节点类(包含测试方法)

/*
 *打印两个有序链表的公共部分
 *
 * 解题思路
 * 如果head1的值小于head2的值,head1往下移动
 * 如果head2的值小于head1的值,head2往下移动
 * 如果head1的值等于head2的值,则打印这个值,head1和head2都往下移动
 * head1和head2有一个为空,则停止
 */
public class Node {
    public int value;
    public Node next;

    public Node(int data) {
        this.value = data;
    }

    public static void printCommonPart(Node head1, Node head2) {
        System.out.println("Common part: ");
        //head1和head2有一个为空,则停止
        while (head1 != null && head2 != null) {
            //如果head1的值小于head2的值,head1往下移动
            if (head1.value < head2.value)
                head1 = head1.next;
                //如果head2的值小于head1的值,head2往下移动
            else if (head2.value < head1.value)
                head2 = head2.next;
                //如果head1的值等于head2的值,则打印这个值,head1和head2都往下移动
            else {
                System.out.print(head1.value + " ");
                head1 = head1.next;
                head2 = head2.next;
            }
        }
    }
    
    public static void main(String[] args) {
        //创建两个有序链表
        MyLinkedList list1 = new MyLinkedList();
        MyLinkedList list2 = new MyLinkedList();
        //有序链表一  12345
        list1.addNode(1);
        list1.addNode(2);
        list1.addNode(3);
        list1.addNode(4);
        list1.addNode(5);
        //有序链表二  02456
        list2.addNode(0);
        list2.addNode(2);
        list2.addNode(4);
        list2.addNode(5);
        list2.addNode(6);
        //查找公共部分
        printCommonPart(list1.head, list2.head);//输出结果为245
    }
}

链表类(只完成了添加功能)
``/**
 * 构建一个只有添加功能的链表类
 * 思路:
 * 找到链表的末尾结点,把新添加的数据作为末尾结点的后续结点
 */
public class MyLinkedList {
    Node head;

    public void addNode(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }
        Node temp = head;
        while (temp.next != null) {
            temp = temp.next;
        }
        temp.next = newNode;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值