链表练习-1删除单向链表的尾结点Java

链表是一种递归的数据结构,或者为空(null),或者含有泛型元素的结点和指向另一条链表的引用

    class Node{
        Item item;
        Node next;
    }

 已知一个链表的首结点first,删除链表的尾结点

思路如下(这尼玛字儿也太丑了,凑合看吧)

 

	void deleteLast(){

       //第一步,将令current与first指向同一个链表
		Node current = first;

		//若链表为空则不做任何操作
		if(current==null) {return;}

        //若链表不为空则令next为current的下一个结点
		Node next = current.next;
        //如果链表中仅有一个元素,令first为null
		if(next == null) {first = null;}

		else {
            //循环操作直至next.next为空
			while(next.next!=null) {
				current = next;
				next = current.next;
			}
            //当next.next为null时,令current.next为null
			current.next = null;
		}
	}

链表9、8、7、6...0; 测试结果如下

 失败代码对比(左图为失败品,并没有删除尾结点)

 

 

 

 将右图中的最后一行代码current.next = null 改为 next = null同样会失败。

左图运行Debug过程如下,first的尾结点id与current的id相同, 说明current确实是指向了first的尾结点。但是当运行最后一步,令current = null,而first的尾结点并没有改变。

因为令current=null,只是将current重新指向了另一个空对象null;并不能改变其原指向的first尾结点。也就是说只是将current重定向了而已,并没有改变原有对象。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值