如何输出内部类的值

实例

在定义链表时,我们常常需要定义一个内部类用以表示结点。

如下图就是MySingleList的定义以及部分方法

public class MySingleList {

    //代表当前列表的头结点的引用
    public Node head;

    //定义一个Node内部类
    class Node {
        public int val;
        public Node next;

        //构造方法
        public Node(int val) {
            this.val = val;
            this.next = null;
        }

        public Node() {
        }
    }

    //头插法 O(1)
    public void addFirst(int data) {
        Node node = new Node(data);
        node.next = this.head;
        this.head = node;
    }

    //从任意位置开始打印
    public void display(Node node) {
        Node cur = node;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }
 }

当我们在实现两个有序链表的合并的时候,需要返回合并后的链表的头结点,那么如何打印这个合并后的链表呢。

public class Test {
    public static MySingleList.Node mergeTwoLists(MySingleList mySingleList1,MySingleList mySingleList2){
        MySingleList.Node cur1 = new MySingleList().new Node();
        MySingleList.Node cur2 = new MySingleList().new Node();
        cur1 = mySingleList1.head;
        cur2 = mySingleList2.head;
        MySingleList.Node newhead = new MySingleList().new Node(-1);
        MySingleList.Node pre = newhead;
        while(cur1 != null && cur2 != null ){
            if(cur1.val <= cur2.val ) {
                pre.next = cur1;
                pre = pre.next;
                cur1 = cur1.next;
            }
            else{
                pre.next = cur2;
                pre = pre.next;
                cur2 = cur2.next;
            }
        }
        if(cur1 != null){
            pre.next = cur1;
        }
        else{
            pre.next = cur2;
        }
        return newhead.next;
    }
    public static void main(String[] args) {
        MySingleList mySingleList1 = new MySingleList();
        //头插法
        mySingleList1.addFirst(7);
        mySingleList1.addFirst(5);
        mySingleList1.addFirst(3);
        mySingleList1.addFirst(1);
        mySingleList1.display(mySingleList1.head);//此时打印时只会打印1234
        MySingleList mySingleList2 = new MySingleList();
        //头插法
        mySingleList2.addFirst(8);
        mySingleList2.addFirst(6);
        mySingleList2.addFirst(4);
        mySingleList2.addFirst(2);
        mySingleList1.display();
        mySingleList2.display();
        //合并两个有序链表,并返回新的链表的头节点
        MySingleList.Node ret = mergeTwoLists(mySingleList1,mySingleList2);
        //从指定位置打印链表
        mySingleList2.display(ret);//输出结果是12345678
        mySingleList1.display(ret);
        mySingleList1.display(mySingleList1.head);//此时会打印12345678
    }
}

在这里插入图片描述

尤其注意最后两句mySingleList2.display(ret.next); mySingleList1.display(ret.next);两句执行结果是一摸一样的。
注意这里的逻辑。类名.方法(形参),这里面的我们往往的写代码的逻辑时形参指向的内容以及方法所执行的对象都必须全部包含在这个类名所引用的对象里,就像在设计这个代码的时候我总想初始化出合并后的 mySingleList,也就是这个链表对象,用这个链表对象调用display才对。其实根本不用这样。
所以前后两句mySingleList1.display(mySingleList1.head)输出结果是不一样的,display的执行只与mySingleList1.head指向有关,mySingleList1还是mySingleList2只是起一个引用作用

D:\java_code\linklist\src\demo1\Test.java 210()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值