给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。

给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。

思路:
请添加图片描述

用两个指针指向两个链表的第一的节点,哪一个的数值小,这个指针就往后移一位。两个数相等时,打印这个数并且两个指针同时后移,当某一个指针为空时结束循环。

package LinkedTest;

public class PrintCommomPart {

    public static void main(String[] args) {
        Node node1 = new Node(1, 15);
        Node node2 = new Node(2, 17);
        Node node3 = new Node(3, 23);
        Node node4 = new Node(4, 29);
        Node node5 = new Node(5, 37);
        Node node6 = new Node(6, 55);
        Node node7 = new Node(7, 59);
        Node node8 = new Node(8, 70);


        Node node01 = new Node(1, 5);
        Node node02 = new Node(2, 15);
        Node node03 = new Node(3, 30);
        Node node04 = new Node(4, 37);
        Node node05 = new Node(5, 48);
        Node node06 = new Node(6, 50);
        Node node07 = new Node(7, 59);
        Node node08 = new Node(8, 80);


        System.out.println("****************链表1***********************");
        ManageNode link1 = new ManageNode();
        link1.addNode(link1.getHead1(), node1);
        link1.addNode(link1.getHead1(), node2);
        link1.addNode(link1.getHead1(), node3);
        link1.addNode(link1.getHead1(), node4);
        link1.addNode(link1.getHead1(), node5);
        link1.addNode(link1.getHead1(), node6);
        link1.addNode(link1.getHead1(), node7);
        link1.addNode(link1.getHead1(), node8);
        link1.showLinked(link1.getHead1());


        System.out.println("****************链表2***********************");
        ManageNode link2 = new ManageNode();
        link2.addNode(link2.getHead2(), node01);
        link2.addNode(link2.getHead2(), node02);
        link2.addNode(link2.getHead2(), node03);
        link2.addNode(link2.getHead2(), node04);
        link2.addNode(link2.getHead2(), node05);
        link2.addNode(link2.getHead2(), node06);
        link2.addNode(link2.getHead2(), node07);
        link2.addNode(link2.getHead2(), node08);
        link2.showLinked(link2.getHead2());

        ManageNode.printCommomPart(link1.getHead1(),link2.getHead2());


    }

}


class ManageNode {
    private Node head1 = new Node(0, 0);

    public Node getHead1() {
        return head1;
    }


    private Node head2 = new Node(0, 0);

    public Node getHead2() {
        return head2;
    }


    public void addNode(Node head, Node node) {
        Node temp = head;
        while (true) {
            //找到最终的尾结点
            if (temp.next == null) {
                break;
            }
            //如果不为空,节点后移一个
            temp = temp.next;
        }
        temp.next = node;


    }

    public void showLinked(Node head) {
        if (head.next == null) {
            System.out.println("链表为空");
            return;
        }
        Node temp = head.next;
        while (true) {
            if (temp == null) {
                break;
            }
            System.out.println(temp);
            temp = temp.next;

        }

    }


    public static void printCommomPart(Node head1,Node head2){
    
        if (head1.next==null || head2.next==null){
            return;
        }
        
        Node temp1=head1.next;
        Node temp2=head2.next;
        
        while (temp1!=null&&temp2!=null){
        
            if (temp1.message==temp2.message){
            
                System.out.println(temp1.message);
                temp1=temp1.next;
                temp2=temp2.next;
                
            }else if (temp1.message>temp2.message){
            
                temp2=temp2.next;
                
            }else {
            
                temp1=temp1.next;
            }


        }




    }
}

class Node {
    public int no;
    public int message;
    Node next;

    public Node(int no, int message) {
        this.no = no;
        this.message = message;
    }

    @Override
    public String toString() {
        return "Node1{" +
                "no=" + no +
                ", massage='" + message + '\'' +
                '}';
    }
}

运行结果

LinkedTest.PrintCommomPart
****************链表1***********************
Node1{no=1, massage='15'}
Node1{no=2, massage='17'}
Node1{no=3, massage='23'}
Node1{no=4, massage='29'}
Node1{no=5, massage='37'}
Node1{no=6, massage='55'}
Node1{no=7, massage='59'}
Node1{no=8, massage='70'}
****************链表2***********************
Node1{no=1, massage='5'}
Node1{no=2, massage='15'}
Node1{no=3, massage='30'}
Node1{no=4, massage='37'}
Node1{no=5, massage='48'}
Node1{no=6, massage='50'}
Node1{no=7, massage='59'}
Node1{no=8, massage='80'}


15
37
59

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值