zoukankan      html  css  js  c++  java
  • 打印两个有序链表的公共部分

    思路

    先设计出一个链表模型,模拟一个链表
    难度:?

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

    这种设计相当于一个node对象存储多个实例变量,通过node对象将value 赋值给 next 实例变量,通过不断的调用从而构成了一个个的节点。这里的 value 变量相当于 temp 的临时存储数据的空间。

    Node node1 = new  Node(1);
    node1.next = new  Node(5);
    node1.next.next = new  Node(3);
       
    Node node2 = new  Node(2);
    node2.next = new  Node(5);
    node2.next.next = new  Node(4);
    

    接着比较大小:

    • 如果 node1 的值小于 node2,则 node1 “向下移动”
    • 如果 node2 的值小于 node1,则 node2 “向下移动”
    • 相等的话,直接打印 node1 的值,并 node1、node2 一起“向下移动”

    实现

    一个编码格式不很规范,呃

    package com.test.node;
    
    import org.junit.Test;
    
    /**
     * @author lorem
     */
    public class PrintlnCommonNode {
      class Node{
            public int value;
            public Node next;
            public Node(int data){
                this.value = data;
            }
        }
    
        void PrintlnCommonNode(Node node1,Node node2){
            while (node1 != null && node2 != null){
                if (node1.value < node2.value){
                    node1 = node1.next;
                }else if(node1.value > node2.value){
                    node2 = node2.next;
                }else{
                    System.out.println(node1.value+" ");
                    node1 = node1.next;
                    node2 = node2.next;
                }
            }
        }
        //附加的打印链表节点函数
        void PrintlnNode(Node node) {
            while (node != null) {
                System.out.println(node.value + " ");
                node = node.next;
            }
        }
    
        @Test
        public void test() {
            Node node1 = new  Node(1);
            node1.next = new  Node(5);
            node1.next.next = new  Node(3);
            
            Node node2 = new  Node(2);
            node2.next = new  Node(5);
            node2.next.next = new  Node(4);
    
            PrintlnCommonNode(node1,node2);
        }
    }
    
    - The End -

    知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

  • 相关阅读:
    乘积最大(动规)
    电话圈(floyd)
    孪生蜘蛛
    解题报告
    最大上升子序列和
    怪盗基德的滑翔翼(还是最长x序列)
    最长公共子序列
    合唱队形(动规,最长不下降子序列)
    课堂笔记 4.6
    2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest I Lottery
  • 原文地址:https://www.cnblogs.com/hoochanlon/p/9676672.html
Copyright © 2011-2022 走看看